我正在用很多图片做一个Android应用程序,当我在内存中加载很多图片时,会发生OutOfMemoryException。
我用谷歌搜索项目,大多数网页建议使用bitmap.recycle()和LruCache,但我感到困惑的是,当我从LruCache中删除位图时,删除的位图仍占用内存,LruCache如何减少内存使用量??
答案 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
此视频显示,缓存通过从队列末尾删除对象来管理自身,因此您不需要自己执行此操作。
加载位图时是否使用选项参数?您可以通过缩小图像大小和质量来节省大量空间。