我在我的 Android 应用程序中遇到了一堆古怪的(而且很难找到)内存泄漏。我没有任何静态位图(所有关于泄漏 Bitamp 的教程都告诉你不要这样做)。但是,我确实有一个位图,我存储在我的应用程序类中,我的一系列 Activity 正在使用它。当最后一个 Activity 退出时,我正在调用 recycle()
,但我想知道将数据存储为 byte[]
并创建是否更安全在每个使用它的 Activity 中从本地取出一个 Bitamp,然后在完成后立即释放它。我对 byte[]
感到好奇的是,VM 的垃圾收集时间比 Bitmap 更容易(它似乎完全不擅长)。
非常感谢所有帮助。
最佳答案
从 Bitmap
改变到 byte[]
不会解决问题,这是由维护对 Bitmap
的引用引起的目的。而不是调用 recycle()
,您应该将引用设置为 null
当最后一个 Activity 退出时。这将完成调用 recycle()
的所有操作dos plus 允许 GC 收集 Bitmap
对象本身。 (GC在回收时不区分Bitmap
和byte[]
,未引用对象就是未引用对象...)
唯一建议(如果 Bitmap
确实是内存泄漏的来源)是使用 WeakReference<Bitmap>
在您的应用程序类中而不是硬引用。那么每个 Activity 都可以get()
实际Bitmap
(如果它仍然存在)。那么你不必将它设置为 null
; GC 将自动收集 Bitmap
当没有硬引用时,留下一个空的弱引用。
关于android - 与 Bitmap 不同,byte[] 是否会被垃圾收集?或者是一样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010314/