Android LruCache OutOfMemoryException

时间:2015-03-04 13:41:55

标签: android bitmap

我正在用很多图片做一个Android应用程序,当我在内存中加载很多图片时,会发生OutOfMemoryException。

我用谷歌搜索项目,大多数网页建议使用bitmap.recycle()和LruCache,但我感到困惑的是,当我从LruCache中删除位图时,删除的位图仍占用内存,LruCache如何减少内存使用量??

3 个答案:

答案 0 :(得分:1)

  

LruCache如何减少内存使用量?

LruCache不会减少内存使用量,只会减少加载时间并删除不必要的下载或解码操作。如果您无法管理bitmap尺寸并正确解码,即使您使用OOM,也会获得LruCache例外。

答案 1 :(得分:0)

  

当我从LruCache中删除位图时,删除的位图仍占用内存

直到它被垃圾收集。如果您的缓存中没有其他内容保留在位图上,一旦将其从缓存中删除,它就会被垃圾收集,这应该在您的下一个OutOfMemoryError之前完成。

答案 2 :(得分:0)

根据Google Devs视频,我们必须为缓存找到最佳尺寸。可以通过以下代码完成:

     ActivityManager am= (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    diskCacheSize = (am.getMemoryClass()*1024*1024)/8;

请允许我添加有关LRU缓存的官方Google视频。 https://www.youtube.com/watch?v=R5ON3iwx78M

此视频显示,缓存通过从队列末尾删除对象来管理自身,因此您不需要自己执行此操作。

加载位图时是否使用选项参数?您可以通过缩小图像大小和质量来节省大量空间。