美文网首页
Bitmap优化

Bitmap优化

作者: timber_wu | 来源:发表于2017-05-20 19:15 被阅读37次

    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优化

          本文链接:https://www.haomeiwen.com/subject/sbttyttx.html