Rumah > Soal Jawab > teks badan
ringa_lee2017-04-17 15:50:42
android:largeHeap="true"
图片墙加载完就需要90%+的内存了,developer.android.com/training/displaying-bitmaps/process-bitmap.html用的官方教程也有bitmap内存泄漏问题,每次进入退出activity内存增量都为1%左右,而且加载的最大图片数量几乎一致!!
怀疑android本身没有做好处理bitmap的问题
ringa_lee2017-04-17 15:50:42
先不谈工具理想不理想,要降低内存使用如何做?
通常的方式是通过Options.inSampleSize来进行抽样,会造成图片质量下降,但是有效.
universal-imageloader提供的config里虽然有相关的配置,但是看过源代码就会发现,默认的几种配置在图片小于屏幕分辨率的时候并不会缩小.因此如果你有一个分辨率较高的手机,那么大部分情况下universal-imageloader会以inSampleSize=1来进行处理,也就是不做抽样.
所以我的处理方法是在他的源码基础上进行修改,增加几个抽样的维度,即使图片已经小于当前屏幕的分辨率,仍然可以控制他进行抽样.对比原有的配置,这样做内存使用成本减少(抽样大小+1内存使用应该是减少75%)理论上图片效果会差一些,但实际上手机分辨率虽然一直在提高但是尺寸无非4-6寸之间,对于缩略图来说,这点损失肉眼根本判断不出来,高质量图片在大图中展示即可.
另外对于imageloader,.bitmapConfig(Bitmap.Config.RGB_565)也可以减少内存使用,官方文档里有说明.
另外你说反复进出activity会有这个问题,你可以尝试手动回收一下图片.这块结合这几个框架我没试过,自己试试吧.
大家讲道理2017-04-17 15:50:42
OOM溢出的话那一定是java层有泄露,用MAT分析一下引用情况吧
android:largeHeap="true"的方式也无非是延缓一下OOM的出现而已