【发布时间】:2013-03-08 00:02:27
【问题描述】:
我已经阅读了大量关于这两个错误的帖子,但似乎找不到适合我的解决方案。 我有一个基本的动物列表视图活动。当您单击列表中的某个项目时,它会打开 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(Native Method)
在我打开 ViewAnimalActivity 大约 20 次并且应用程序崩溃后,就会出现这些错误之一。 唯一似乎永远有效的是 System.gc() ,但我知道这不是一个好的解决方案。
我在android4.1中测试,但是minSDK设置为android3.0
我读到位图回收的 javaVM 错误在 3.0 中已修复?
由于某种原因,如果没有显式调用 gc,垃圾收集的速度不够快。这些图片很小,大多在 100-300kB 之间。
有什么想法吗?
编辑:
似乎更快乐
image.setImageDrawable(null);
我想我之前在 Android2.2 上仍然设置它时尝试过,但到目前为止 Android3.0 对它很满意。
【问题讨论】:
-
需要更多代码请添加活动代码
-
我没有提到也没有在应用程序的其他任何地方使用图像或 imageView。我所做的只是设置一个图像,然后在不再需要它时尝试将其删除。
-
发布你的 logcat 看看你在哪里得到了 OutOfMemoryError
标签: java android android-layout