Bitmap优化

Bitmap复用


Bitmap decode

  • 常见的jpg,png,webp(Android4.2才开始支持)是图像的存储格式
  • Android中要显示图片必须先经过解码(decode)读取图像的数据到内存中
  • BitmapFactory提供了常用的一些decode方法
  • 图片真正占用的内存大小要看decode之后的数据大小

Bitmap memory

  • <=2.3.3(api 10)
    BItmap解码之后 的数据存储在Native Memory中
    手动调用Recycle回收
  • 》=3.0
    Bitmap解码之后的数据存储在Dalyik heap(Java)中
    Dalvik自动回收

Re-using Bitmaps

  • 对象池(Object Pool)---相同的对象会互斥使用同一块内存空间
    mBitmapOptions.inBitmap=mCurrentBitmap;
    mCurrentBitmap=BitmapFactory.decodeFile(filename,
    mBitmapOptions)
  • 建立多个对象池
    第三方库----glide

预压缩Bitmap


createScaledBitmap(inBmp,64,128)---加载后缩放Bitmap到给定的宽高
mBitmapOption.inSampleSize=4;// 会把采样率变成最接近2的N次方的值
mCurrentBitmap=BitmapFactory.decodeFile(fileName,
mBitmapOptions);
查看原始的宽高
.inJustDecodeBounds=true;


减少占用字节


png--比较高质量的图像
ARGB_8888 每个像素占4字节(图像质量最高,支持透明度)
RGB_565 每个像素占2字节(缩略图,不支持透明度)
ARGB_4444 每个像素占2字节(缩略图,支持透明度)
ALPHA_8 每个像素占1字节
图标类节约内存:ALPHA_8+Color tint
节约COU:ARGB_8888
** Android默认都是以ARGB_8888解码的**
jpg --在Android中也是四个字节

开发中注意压缩PNG文件的大小

Script PNG
如不支持透明度,可以选择JPG格式的文件

  • 推荐web-p的文件

LRU cache(实现对象池)


当需要删除缓存时会替换掉那些不经常使用的缓存

    Bitmap bmpToDraw=mCahe.get(filename);
    if(bmptToDraw ==null){
    bmpToDraw=BitmapFactory.decodeFile(filename);
    mCache.put(filename,bmpToDraw);//将Bitmap对象加入对象池
    }

你可能感兴趣的:(Bitmap优化)