android - 与 Bitmap 不同,byte[] 是否会被垃圾收集?或者是一样的?

标签 android memory-management bitmap arrays

我在我的 Android 应用程序中遇到了一堆古怪的(而且很难找到)内存泄漏。我没有任何静态位图(所有关于泄漏 Bitamp 的教程都告诉你不要这样做)。但是,我确实有一个位图,我存储在我的应用程序类中,我的一系列 Activity 正在使用它。当最后一个 Activity 退出时,我正在调用 recycle(),但我想知道将数据存储为 byte[] 并创建是否更安全在每个使用它的 Activity 中从本地取出一个 Bitamp,然后在完成后立即释放它。我对 byte[] 感到好奇的是,VM 的垃圾收集时间比 Bitmap 更容易(它似乎完全不擅长)。

非常感谢所有帮助。

最佳答案

Bitmap 改变到 byte[]不会解决问题,这是由维护对 Bitmap 的引用引起的目的。而不是调用 recycle() ,您应该将引用设置为 null当最后一个 Activity 退出时。这将完成调用 recycle() 的所有操作dos plus 允许 GC 收集 Bitmap对象本身。 (GC在回收时不区分Bitmapbyte[],未引用对象就是未引用对象...)

唯一建议(如果 Bitmap 确实是内存泄漏的来源)是使用 WeakReference<Bitmap> 在您的应用程序类中而不是硬引用。那么每个 Activity 都可以get()实际Bitmap (如果它仍然存在)。那么你不必将它设置为 null ; GC 将自动收集 Bitmap当没有硬引用时,留下一个空的弱引用。

关于android - 与 Bitmap 不同,byte[] 是否会被垃圾收集?或者是一样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010314/

相关文章:

java - 当只有一个 fragment 可见时, fragment 之间进行通信

android - 在 Android 的 OKhttp 中通过 POST 请求发送 JSON 正文

android - android 8.1.0安装burp证书后报"YOUR CONNECTION IS NOT PRIVATE"错误

java - 不裁剪图像的 picasso 圆变换

Android:如何将 ImageView 转换为 Bitmap 并传递给另一个 Activity ?

android - Phonegap 应用程序在 Samsung Galaxy S3 上存在渲染问题

c - 将内存分配给C中的二维数组

c - 为什么堆栈内存 "cheaper"而不是 C 中的堆内存?

c++ - 在分配的地址实例化结构(分配赋值)

java - 运行时异常 : Buffer not large enough for pixels