首页 > 代码库 > 安卓 使用LruCache 加载图片 遇到的问题
安卓 使用LruCache 加载图片 遇到的问题
本来 使用listview的时候 加载大图片的时候 会遇到内存溢出而导致崩溃。
但是使用LruCache的时候 原本以为可以 解决这个问题。 但是发现还是出现了内存溢出的情况。 困扰很久
另外,在图片下载完毕 保存在本地后,却发现读取大量图片的时候 ,利用lrucache 却不会内存泄漏而导致崩溃。
最后经过查看日志 发现, 在网络加载的时候 很吃内存,随着不断产生线程去下载图片, 能够看到 虚拟机释放内存的时候基本起不到作用 每次最多释放十几K,内存基本上快占满了。。。
而加载本地图片的时候 ,内存释放的确相当及时,每次大约4M多, 这样当然就不会内存泄漏了。。。 那问题发生在什么地方呢?
考虑可能产生的因素: 1 开启线程太多。
但是 加载本地图片的时候也是开启新的线程了啊 。。。但是它却没有崩溃啊。。
2 下载过成功产生太多临时Bitmap ,没能够释放的原因?
但是网络加载 成功后 我也把下载的bitmap 放到了LruCache中了啊 ,按理说他应该会在超出给定大笑的时候帮我释放内存的啊。。。为什么呢? 难道是在这之前有阻塞的地方,而这个地方在不断地堆积byte到内存中?于是我找到下载图片的地方
conn.connect();
bitmap = BitmapFactory.decodeStream(is,null,bmpFactoryOptions);
问题应该出现在这里, 当 开启太多线程下载图片的时候, 在下载过程缓冲了太多byte[],并且在各自的线程中等待着数据的到来。这样虚拟机是不会释放这些数据的,多个线程阻塞,造成内存溢出。而导致了这个问题。
避免这个问题 ,有两个解决思路, 1少开几个线程 2 图片不要太大。
这么认为不知道对不对 。。。。我是这么想的