Android位图回收

标签 android garbage-collection android-bitmap

免责声明:我阅读了大约 20 个现有问题。不幸的是,他们都没有解决我的问题。

我有一个 Activity 。此 Activity 从全局/静态类 C 获取位图并将位图设置为 ImageView。当 Activity 结束并且我尝试重新打开 Activity 时,我得到了 java.lang.RuntimeException: Canvas: trying to use a recycled bitmap 异常。我在任何时候都不调用 Bitmap.recycle()。另外,我没有删除 C 类中的位图引用。我尝试了以下方法,但它们没有用:

  • 调用ImageView.setDrawingCacheEnabled(false)
  • 在为 ImageView 设置位图之前,进行深拷贝(通过 Bitmap.copy() 方法)

此外,我在整个 Activity 生命周期中放置了一些日志语句。在 onDestroy() 中,在调用 super.onDestroy() 之前,我检查并确保位图没有被回收(通过 Bitmap.isRecycled())

我该如何解决这个问题?

最佳答案

罪魁祸首原来是 RemoteControlClient.MetadataEditor.apply(),它确实为传递给它的位图调用了 recycle()

关于Android位图回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693781/

相关文章:

java - Firebase.setandroidcontext(getApplicationContext()) 在应用程序 oncreate() 中不起作用

garbage-collection - 哈希表疑似SBCL垃圾回收Bug

android - BitmapFactory 意外降低图像采样率

java - 位图工厂抛出 FileNotFoundException

Android 改造 - GET Json 数组

android - 如何在模拟器的 AVD 中使系统分区可写

java - Java 垃圾收集会释放它吗?

java - 在 Canvas 顶部绘制多行文本

java - 是否可以抽象出 XML 代码的重复部分?

java - 如何计算 64 位 Java 内存成本