0

https://stackoverflow.com/a/6779067/1236259スレッドで hp.android の回答を試していましたが、アクティビティが onDestroy メソッドを呼び出すことはありません

画像付きの ListView があり、次の方法で他のアクティビティを呼び出します。

ImageButton imageButtonSeeMap = (ImageButton)this.findViewById(R.id.imageButtonSeeMap);
imageButtonSeeMap.setOnClickListener(new OnClickListener() {....

新しいアクティビティから ListView アクティビティを再度呼び出します。この時点で例外が発生します: java.lang.OutOfMemoryError: ビットマップ サイズが VM 予算を超えています

リストビューの画像は、次を使用して作成されます。

thumb_u = new URL(lp.get(i).getImage());
            thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");

            imageViewPoi.setImageDrawable(thumb_d);

画像の記憶を解放するにはどうすればよいですか?onDestroy メソッドの unbindDrawables は呼び出されません。

何か案が?

4

1 に答える 1

1

Android では画像は野獣なので、OutofMemory 例外は慣れる必要があるかもしれません。これにより、リストビューがウェブから画像を取得し、アプリをクラッシュさせないようにする必要があります。

2 番目のコード ブロックが ListView のアダプタ getView() メソッドからのものであると仮定して、次のことを試してください。

try {
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
} catch (OutOfMemoryError e) {
    System.gc();
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
}
于 2012-06-28T22:08:13.283 に答える