首先,我知道有很多相关的帖子,我已经阅读了很多相关帖子,其中没有一个有帮助,我没有想法:)
所以我正在开发一个Android应用程序(sdk版本14+),它使用大量图像(按钮,徽标,显示大量图像等).平均图像大小为120kb + - 100kb
正如标题所说,我得到OutOfMemory错误.首先,我将图像源添加到xml中的ImageViews或使用setImageResource以编程方式添加.很快,由于OutOfMemory错误,应用程序开始崩溃.所以我已经阅读了这篇(http://developer.android.com/reference/android/util/LruCache.html)教程并实现了LruCache.我将位图添加到lrucache,然后使用get方法将位图设置为imageview.
在activity的onDestroy方法中,我在lrucache上调用evictAll方法,并将lrucache设置为null.所以我认为,那时的记忆就被释放了.
但问题仍然存在,当我经历几个活动时,应用程序崩溃了.
非常感谢:)
根据文档,超过最大可用 VM 内存将引发 OutOfMemory 异常。似乎缓存位图超出了可用的虚拟内存。
不使用时回收位图。
bitmap.recycle();
Run Code Online (Sandbox Code Playgroud)
我什么时候应该使用 LRUCache 回收位图?。看看 commonsware 接受的答案。
我相信,当 LRUCache 驱逐一个图像以为另一个图像腾出空间时,内存不会被释放。(用户在上面的链接中询问)
它不会,直到位图被回收或垃圾收集为止。(由comcommsware回答)。
http://www.youtube.com/watch?v=_CruQY55HOk。谈论内存管理、内存泄漏和使用 MAT 分析器。
| 归档时间: |
|
| 查看次数: |
5335 次 |
| 最近记录: |