ページ 11

androidアプリ開発 OutOfMemory

Posted: 2012年5月10日(木) 22:33
by zarame
初めまして、androidアプリを今回初めて作成している者です。

私は今「android対応 マスコットアプリ プログラミング」という本を見ながらアプリを作成しています。
この書籍の中にある キャラクターの表示 という項目までは何とかたどり着けたのですが、キャラクター表示のためのプログラムを記入し、いざ実際エミュレーターで実行してみるとLogCatに「java.long.OUtOfMemoryError: bitmap size exceeds VM budget」やその他のエラーが表示され強制終了されます。


以下プログラムです↓
............................................................
package my.name;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class Bit2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(new BitmapView(this));
}

class BitmapView extends View {

Bitmap bitmap[] =new Bitmap[3];

public BitmapView(Context c) {

super(c);

Resources r=c. getResources();

bitmap[0]=BitmapFactory.decodeResource(
r, R.drawable.画像ファイル1);
bitmap[1]=BitmapFactory.decodeResource(
r, R.drawable.画像ファイル2);
bitmap[2]=BitmapFactory.decodeResource(
r, R.drawable.画像ファイル3);
}
@Override
protected void onDraw(Canvas c) {

c.drawColor(Color.WHITE);

Paint p=new Paint();

for (int i=0; i<bitmap.length; i++) {
c.drawBitmap(bitmap, (
c.getWidth() -bitmap.getWidth())/2, 0, p);
}
}
}
}
....................................................

書籍にある通り、画像サイズは1200 x 1600 の透過PNGです。
調べてみると画像サイズが大きいのはわかったのですが、どのように対処するべきかわかりませんでした…。

このプログラムの中で画像サイズを小さくするにはどのように記述すればよいでしょうか?
ご指導いただけると幸いです。

長文になりましたがよろしくお願いします。

Re: androidアプリ開発 OutOfMemory

Posted: 2012年5月10日(木) 22:41
by みけCAT
プログラムの中で画像サイズを小さくするのは、あまり意味がないのではないでしょうか?
GIMPなどの画像編集ソフトで、事前にリサイズしてみてください。

Re: androidアプリ開発 OutOfMemory

Posted: 2012年5月10日(木) 22:59
by bitter_fox
http://vacaposi.blogspot.jp/2011/09/09- ... e2168.html
が参考になると思います。

あとは、メモリリークが起きていないかの確認もするとよいと思います。

Re: androidアプリ開発 OutOfMemory

Posted: 2012年5月11日(金) 23:04
by zarame
返信が遅くなってしまい、申し訳ないです。

ご回答くださり、ありがとうございました!
お二人から頂いたご意見を参考に再度とりかかっていきたいと思います。

また質問させていただくかと思いますが、ご縁がありましたらぜひともよろしくお願いします^^*

Re: androidアプリ開発 OutOfMemory

Posted: 2012年5月23日(水) 16:14
by はらぺこ
私も現在この書籍を使って勉強しています。
特にエミュレーターでのOOMが多いです。
このプログラムは第五章のものだと思いますが、
第六章に入ってからはいよいよ実機でもOOMが起こるようになりました。

プログラム上で小さくしても駄目みたいでした。
上記のプログラムではアプリ起動時に取得しているらしいので、エラーが起きやすいようです。
第五章の三番目のプログラムはプログラム呼び出し時に画像を取得するので、
まだエラーが起きにくいようです。(横にしたときとか)

メモリアナライザを使ってみてもそこまでメモリを使っているようには見えません。
Androidってこんなものなのかなぁと思ったりもしてます。

私のほうでも調査してみますが、
何か分かったらご連絡ください。

http://harapeko.wktk.so/
http://android.wktk.so/

Re: androidアプリ開発 OutOfMemory

Posted: 2012年5月30日(水) 00:19
by nanashi777
AVDのターゲットを4系にしてみたらどうでしょうか?