概述
一、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
双向链表
最后
以上就是追寻小松鼠为你收集整理的Android性能优化(七)Bitmap内存压缩一、Bitmap内存占用二、Bitmap内存压缩三、Bitmap内存优化 四、LruCache五、LinkedHashMap的全部内容,希望文章能够帮你解决Android性能优化(七)Bitmap内存压缩一、Bitmap内存占用二、Bitmap内存压缩三、Bitmap内存优化 四、LruCache五、LinkedHashMap所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复