我必须释放位图占用的内存。因此,当我的 Activity 完成时,我会对所有这些调用 recycle()
。
这些位图始终在可绘制对象中使用,作为背景属性或源(ImageView
的情况)属性。
但问题是,当稍后另一个 Activity 有一个也使用这些位图的 View 时,它将显示
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap.
我能做什么,我无法将位图保留在内存中,只是因为也许用户在稍后的某个时刻启动了使用它们的 Activity 。我如何告诉位图释放内存并稍后可以再次使用?
最佳答案
解决方案是使用以下方法初始化位图和 View :
Bitmap b = BitmapFactory.decodeResource(resources, R.drawable.mybitmap);
view.setBackgroundDrawable(new BitmapDrawable(b));
但这不适用于 XML 位图。但位图应该可以从 View 中检索。
将位图实例放在内存中后,可以对其调用 recycle() 以立即释放内存。
并且在回收位图之前,必须确保它不再被任何 View 引用 - 将可绘制/ View 的引用设置为 null。否则会抛出异常。为了做到这一点,有必要跟踪引用位图的 View ,并在回收它之前将所有引用清空。
所以我的实际问题不是重用位图。问题是回收位图,同时仍被 View 引用。
关于android - 如何回收位图并在以后再次使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391346/