Fresco 5.0以上内存持续增长问题优化

fresco是android一款比较好的图片处理框架,特别是在5.0以下,效果很佳。

在5.0以下系统,Fresco将图片放到一个特别的内存区域ashmem中。这块内存我们通过android studio查看时不会显示,回收机制与java回收机制差不多。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。

5.0以上系统,我们使用了Fresco,但是看到的效果是内存持续增长到200M,甚至300M,线上的OutOfMemoryError成百上千的。当时一度怀疑Fresco这个框架是不是支持的不够好。静下心来研究了一下fresco内部机制,最终解决了Fresco 5.0以上内存优化的问题。

是否能使用Fresco把5.0以上系统bitmap 保存到ashmem中

也是网上广为流传的方式,通过BitmapFactory.Options的属性:

options.inPurgeable

下面通过实例测试

//图片1
ImageView iv = new ImageView(this);
         iv.setLayoutParams(new ViewGroup.LayoutParams(500,300));

         options = new BitmapFactory.Options();
         options.inPurgeable = true;
          iv1.setImageBitmap( BitmapFactory.decodeResource(getResources(),R.drawable.big_pic,options));

//图片2

         ImageView iv1 = new ImageView(this);
         iv1.setLayoutParams(new ViewGroup.LayoutParams(500,300));
         iv1.setImageBitmap( BitmapFactory.decodeResource(getResources(),R.drawable.big_pic,options));

//图片3
         ImageView iv2 = new ImageView(this);
         iv2.setLayoutParams(new ViewGroup.LayoutParams(500,300));
         iv2.setImageBitmap( BitmapFactory.decodeResource(getResources(),R.drawable.big_pic,options));

3张图片,单独显示一张在21M左右,两两组合 内存在28M左右,3张图片一起显示在32M左右。使用了inPurgeable没啥效果。查看文档在api21已经废弃

@deprecated As of {
  
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值