博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓 使用LruCache 加载图片 遇到的问题
阅读量:4953 次
发布时间:2019-06-12

本文共 799 字,大约阅读时间需要 2 分钟。

本来 使用listview的时候 加载大图片的时候 会遇到内存溢出而导致崩溃。  

但是使用LruCache的时候 原本以为可以 解决这个问题。  但是发现还是出现了内存溢出的情况。   困扰很久

另外,在图片下载完毕 保存在本地后,却发现读取大量图片的时候 ,利用lrucache 却不会内存泄漏而导致崩溃。

最后经过查看日志 发现,  在网络加载的时候 很吃内存,随着不断产生线程去下载图片, 能够看到 虚拟机释放内存的时候基本起不到作用 每次最多释放十几K,内存基本上快占满了。。。

而加载本地图片的时候 ,内存释放的确相当及时,每次大约4M多, 这样当然就不会内存泄漏了。。。   那问题发生在什么地方呢?  

 

 

考虑可能产生的因素: 1  开启线程太多。     

但是 加载本地图片的时候也是开启新的线程了啊 。。。但是它却没有崩溃啊。。

 2  下载过成功产生太多临时Bitmap ,没能够释放的原因?

 但是网络加载 成功后 我也把下载的bitmap 放到了LruCache中了啊 ,按理说他应该会在超出给定大笑的时候帮我释放内存的啊。。。为什么呢? 难道是在这之前有阻塞的地方,而这个地方在不断地堆积byte到内存中?于是我找到下载图片的地方

conn.connect();

bitmap = BitmapFactory.decodeStream(is,null,bmpFactoryOptions);

问题应该出现在这里, 当 开启太多线程下载图片的时候, 在下载过程缓冲了太多byte[],并且在各自的线程中等待着数据的到来。这样虚拟机是不会释放这些数据的,多个线程阻塞,造成内存溢出。而导致了这个问题。

避免这个问题 ,有两个解决思路,  1少开几个线程  2 图片不要太大。  

 

这么认为不知道对不对 。。。。我是这么想的 

 

转载于:https://www.cnblogs.com/zey23/p/3873816.html

你可能感兴趣的文章
jquery获取iframe中的dom对象
查看>>
会考试与会写论文是两码事
查看>>
java中将一个文件夹下所有的文件压缩成一个文件
查看>>
Linux临时和永久关闭selinux
查看>>
对待事情应该有的态度!!!
查看>>
如何开放 Azure 虚拟机 Ping 功能
查看>>
[SQL Server] 服务启动帐户
查看>>
PyQt5-对话框控件使用(QFileDialog)
查看>>
fastjson的json字符串转List
查看>>
webpack4+node合并资源请求, 实现combo功能(二十三)
查看>>
3 -11 文件的修改和保存
查看>>
Java类与对象
查看>>
lambda表达式思维导图
查看>>
网易新闻首页骨架(父子控制器实现)
查看>>
分块来水题
查看>>
使用GitHub
查看>>
pass parameters to view(参数视图)
查看>>
Angular
查看>>
js实现考试随机选题
查看>>
异步上传图片到另外一台服务器
查看>>