我已经阅读了大量关于这两个错误的帖子,但似乎找不到适合我的解决方案。我有一个基本的动物列表视图活动。当您单击列表中的某个项目时,它会打开 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 返回 listview 活动时,我这样做:
@Override
protected void onDestroy() {
super.onDestroy();
//((BitmapDrawable)image.getDrawable()).getBitmap().recycle();
image.getDrawable().setCallback(null);
//System.gc();
System.out.println("Destroy image!");
}
如果我取消注释 recycle() 行,我会收到“无法绘制回收位图”错误。如果我让它保持原样,我会得到 bitmapfactory 的 outofmemoryerror。
java.lang.IllegalArgumentException:无法绘制回收位图或 java.lang.OutOfMemoryError android.graphics.BitmapFactory.nativeDecodeAsset(本机方法)
在我打开 ViewAnimalActivity 大约 20 次并且应用程序崩溃后,这些错误中的任何一个都会发生。唯一似乎永远有效的是 System.gc() ,但我知道这不是一个好的解决方案。
我在android4.1中测试,但是minSDK设置为android3.0
我读到位图回收的 javaVM 错误在 3.0 中已修复?
出于某种原因,如果不显式调用 gc,垃圾收集的速度不够快。这些图像很小,大多在 100-300kB 之间。
有任何想法吗?
编辑: image.setImageDrawable(null);似乎更快乐
我想我之前在 Android2.2 上设置它时也尝试过,但到目前为止,Android3.0 对它很满意。