3 回答
TA贡献2065条经验 获得超13个赞
尝试改变你的onDestroy方法如下
@Override
protected void onDestroy() {
for(Map.Entry<Integer, ImageView> entry : mapImageViews.entrySet()) {
ImageView imageView = entry.getValue();
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if(bitmap != null) {
bitmap.recycle();
}
bitmapDrawable = null;
bitmap = null;
}
imageView.setOnClickListener(null);
imageView.setImageDrawable(null);
imageView.setImageBitmap(null);
imageView = null;
drawable = null;
}
mapImageViews.clear();
mapImageViews = null;
super.onDestroy();
}
TA贡献1810条经验 获得超5个赞
根据回收文件
位图被标记为“死”,这意味着如果调用 getPixels() 或 setPixels() 它将抛出异常,并且不会绘制任何内容。此操作无法逆转,因此仅当您确定该位图不再使用时才应调用它。
我看不到你如何将 your 分配bitmaps
给 your ImageView
,但我假设当你在位图被使用后再次启动意图时,你正在尝试重用位图recycled
。我只在使用时遇到异常android:src=
。如果我ImageView
使用以下内容设置位图oncreate
,它在您列出的所有目标上运行良好,不会引发异常。
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.lake_park));
TA贡献1735条经验 获得超5个赞
实际上我认为你不必手动执行此操作。
如果 Activity2 只有 1 个图像并且已经调整大小,我认为如果您确实面临内存问题,回收不会有太大帮助。
并且根据该文档,仅建议API级别低于10的用户使用recycle(),并且用户的比例很小。 On Android 2.3.3 (API level 10) and lower, using recycle() is recommended.
我想推荐使用第三方图像库,因为它们可以让您免于做这些无意义的事情,让您专注于应用程序更重要的部分。
添加回答
举报