Android性能优化(七)Bitmap内存压缩

一、Bitmap内存占用

内存大小计算

  ARGB_8888

  ARGB各占8位,即WIDTH*HEIGHT*4

 

 RGB_565

    R5位,G6位,B5位,即16位 WIDTH*HEIGH*2

 

getByteCount

  返回可用于存储此位图像素的最小字节数。

 

BitmapFactory.Options

  控制解码图片参数

 

inDensity:

  表示这个bitmap的像素密度,根据drawable目录

 

inTargetDensity:

  表示要被画出来时的目标(屏幕)像素密度 , getResources().getDisplayMetrics().densityDpi

 

二、Bitmap内存压缩

 

BitmapFactory.Options

 

inJustDecodeBounds  

  读取图片out…系列参数,如outWidth与outHeight,可用于计算内存大小

inPreferedConfig  

  设置图片解码后的像素格式,如ARGB_8888/RGB_565

inSampleSize  

  设置图片解码缩放比,如值为4,则加载图片宽高是原图的1/4,内存大小则是1/16

 

对于内存的降低,无论是选择jpg还是png更或者是webp。其实都是毫无意义的。Jpg是属于有损压缩,我们看见的jpg比png文件小,那是因为压缩率高。这都是属于文件存储范畴。对于内存来说,我们加载一张不带alpha通道使用RGB_565格式的png与一张jpg占用的内存大小都是一样的。

 

对于内存的压缩我们能做的就是缩小图片尺寸与改变像素格式。

 

三、Bitmap内存优化

https://developer.android.google.cn/topic/performance/graphics/manage-memory.html

https://developer.android.google.cn/samples/DisplayingBitmaps/index.html

inBitmap复用

 

四、LruCache

  android提供的一个缓存工具类,使用LRU缓存淘汰算法。

  根据数据的历史访问记录来进行淘汰数据, “如果数据最近被访问过,那么将来被访问的几率也更高”。

1. 新数据插入到链表头部;

2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

3. 当链表满的时候,将链表尾部的数据丢弃。

 

DiskLruCache

https://github.com/JakeWharton/DiskLruCache

 

五、LinkedHashMap

双向链表

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值