首页 > android 大量图片加载导致的内存问题

android 大量图片加载导致的内存问题

有没有人用android做过类似的事情,其中一个activity里面一有一百多张图片,如果反复进入该activity就会导致溢出。
已经测试过universal-imageloader,picasso、fresco工具,都不理想,或者是我使用方法的问题。
求大神指点!!


百度:image-loader,有很多android的一些第三方jar包,很好用,xutils等等


"activity里面一有一百多张图片"
你全部要显示? 肯定只显示一部分啊。
其他的等滑到对应的位置再显示


"反复进"才溢出, 可能有内存泄漏.
你可以dump一下heap, 看一下谁持有bitmap的引用


先不谈工具理想不理想,要降低内存使用如何做?
通常的方式是通过Options.inSampleSize来进行抽样,会造成图片质量下降,但是有效.
universal-imageloader提供的config里虽然有相关的配置,但是看过源代码就会发现,默认的几种配置在图片小于屏幕分辨率的时候并不会缩小.因此如果你有一个分辨率较高的手机,那么大部分情况下universal-imageloader会以inSampleSize=1来进行处理,也就是不做抽样.
所以我的处理方法是在他的源码基础上进行修改,增加几个抽样的维度,即使图片已经小于当前屏幕的分辨率,仍然可以控制他进行抽样.对比原有的配置,这样做内存使用成本减少(抽样大小+1内存使用应该是减少75%)理论上图片效果会差一些,但实际上手机分辨率虽然一直在提高但是尺寸无非4-6寸之间,对于缩略图来说,这点损失肉眼根本判断不出来,高质量图片在大图中展示即可.
另外对于imageloader,.bitmapConfig(Bitmap.Config.RGB_565)也可以减少内存使用,官方文档里有说明.
另外你说反复进出activity会有这个问题,你可以尝试手动回收一下图片.这块结合这几个框架我没试过,自己试试吧.


可以使用分页加载


android:largeHeap="true"

图片墙加载完就需要90%+的内存了,developer.android.com/training/displaying-bitmaps/process-bitmap.html用的官方教程也有bitmap内存泄漏问题,每次进入退出activity内存增量都为1%左右,而且加载的最大图片数量几乎一致!!

怀疑android本身没有做好处理bitmap的问题


OOM溢出的话那一定是java层有泄露,用MAT分析一下引用情况吧
android:largeHeap="true"的方式也无非是延缓一下OOM的出现而已


动态加载,只显示你当前显示的,不需要的将对应的bitmap也释放掉

【热门文章】
【热门文章】