これらのエラーの両方に関する大量の投稿を読みましたが、自分に合った解決策が見つからないようです。動物の基本的なリストビュー活動があります。リスト内の項目をクリックすると、AnimalViewActivity が開き、ImageView 内に単純な png 画像が表示されます。
ImageView の画像を設定する場所は次のとおりです。
public void getImage() {
String imageName = myService.yourAnimals.get(key).getType();
System.out.println(imageName);
Resources res = getResources();
int resourceId = res.getIdentifier(imageName, "drawable", getPackageName() );
Drawable drawable = res.getDrawable( resourceId );
image.setImageDrawable( drawable );
}
次に、AnimalViewActivity を離れてリストビュー アクティビティに戻るときは、次のようにします。
@Override
protected void onDestroy() {
super.onDestroy();
//((BitmapDrawable)image.getDrawable()).getBitmap().recycle();
image.getDrawable().setCallback(null);
//System.gc();
System.out.println("Destroy image!");
}
recycle() 行のコメントを外すと、「リサイクルされたビットマップを描画できません」というエラーが表示されます。そのままにしておくと、bitmapfactory の outofmemory エラーが発生します。
java.lang.IllegalArgumentException: リサイクルされたビットマップを描画できません または java.lang.OutOfMemoryError android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
ViewAnimalActivity を約 20 回開いた後、これらのエラーのいずれかが発生し、アプリがクラッシュします。System.gc() だけが永遠に機能するように見えますが、それが良い解決策ではないことはわかっています。
私はandroid4.1でテストしていますが、minSDKはandroid3.0に設定されています
ビットマップのリサイクルに関する javaVM エラーが 3.0 で修正されたということを読みましたか?
なんらかの理由で、gc を明示的に呼び出さないと、ガベージ コレクションの速度が十分ではありません。これらの画像は小さく、ほとんどが 100 ~ 300kB です。
何か案は?
編集:
image.setImageDrawable( null ); の方が幸せそうです。
以前、Android2.2で設定したときに試したと思いますが、Android3.0は今のところ満足しています。