Drawables原生泄漏内存?

时间:2011-10-23 16:40:29

标签: android memory-leaks drawable

我正在阅读这个question,因为我必须将大量下载的资源加载到我正在编写的应用程序中,并且好奇这样做是否会产生巨大的性能影响[对比将它们放在.apk中,并且问题的“正确”答案意味着虽然没有性能下降,但你必须担心在完成内存后释放内存,以免泄漏。

任何人都可以自信地确认或否认这一点吗?我的印象是,一个已加载的Drawable就像它清理活动时的其他所有内容一样。我非常想知道这是不是真的,以及在所述实例中手动收集内存的最可靠方法是什么。

另外,有人知道从SDCard加载图像时是否有明显的性能影响,而不是手机内存。我不是电气工程师,所以,直觉上,似乎因为这是所有固态记忆,它应该以大约相同的速度读取,但我希望得到一个明确的答案。

1 个答案:

答案 0 :(得分:1)

快速回答:

Bitmaps需要两次垃圾收集器清理才能清理。第一个传递释放Java对象,第二个传递本机像素数据。它们不会泄漏,但是当你使指针为空并且GC命中它的第二遍时,你可能会耗尽内存。无论它们来自何种资源,都是如此。当你确定你和系统完成它们时,在位图上调用recycle()总是一个好主意。 由于Dalvik VM中的错误,姜饼在处理内存不足问题和位图方面特别糟糕。

根据我的经验,从apk中加载图像比从SD卡上加载快得多。 1)他们在apk中拉链对齐(如果你对齐你的apk,你应该) 2)不同的电话对SD卡的访问时间不同。一般规则是,如果它在SD卡上,它将缓慢加载。你可以从主线程的内部存储器中加载drawables(即使这是一个坏主意)。您无法从主线程上的SD卡加载任何内容。永远: - \

如果我是你,我在加载图片时会尽可能地懒惰,如果可能的话,我会将它们保存在apk中。