Bitmap優(yōu)化

Bitmap復(fù)用


Bitmap decode

  • 常見的jpg,png,webp(Android4.2才開始支持)是圖像的存儲(chǔ)格式
  • Android中要顯示圖片必須先經(jīng)過解碼(decode)讀取圖像的數(shù)據(jù)到內(nèi)存中
  • BitmapFactory提供了常用的一些decode方法
  • 圖片真正占用的內(nèi)存大小要看decode之后的數(shù)據(jù)大小

Bitmap memory

  • <=2.3.3(api 10)
    BItmap解碼之后 的數(shù)據(jù)存儲(chǔ)在Native Memory中
    手動(dòng)調(diào)用Recycle回收
  • 》=3.0
    Bitmap解碼之后的數(shù)據(jù)存儲(chǔ)在Dalyik heap(Java)中
    Dalvik自動(dòng)回收

Re-using Bitmaps

  • 對(duì)象池(Object Pool)---相同的對(duì)象會(huì)互斥使用同一塊內(nèi)存空間
    mBitmapOptions.inBitmap=mCurrentBitmap;
    mCurrentBitmap=BitmapFactory.decodeFile(filename,
    mBitmapOptions)
  • 建立多個(gè)對(duì)象池
    第三方庫----glide

預(yù)壓縮Bitmap


createScaledBitmap(inBmp,64,128)---加載后縮放Bitmap到給定的寬高
mBitmapOption.inSampleSize=4;// 會(huì)把采樣率變成最接近2的N次方的值
mCurrentBitmap=BitmapFactory.decodeFile(fileName,
mBitmapOptions);
查看原始的寬高
.inJustDecodeBounds=true;


減少占用字節(jié)


png--比較高質(zhì)量的圖像
ARGB_8888 每個(gè)像素占4字節(jié)(圖像質(zhì)量最高,支持透明度)
RGB_565 每個(gè)像素占2字節(jié)(縮略圖,不支持透明度)
ARGB_4444 每個(gè)像素占2字節(jié)(縮略圖,支持透明度)
ALPHA_8 每個(gè)像素占1字節(jié)
圖標(biāo)類節(jié)約內(nèi)存:ALPHA_8+Color tint
節(jié)約COU:ARGB_8888
** Android默認(rèn)都是以ARGB_8888解碼的**
jpg --在Android中也是四個(gè)字節(jié)

開發(fā)中注意壓縮PNG文件的大小

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

  • 推薦web-p的文件

LRU cache(實(shí)現(xiàn)對(duì)象池)


當(dāng)需要?jiǎng)h除緩存時(shí)會(huì)替換掉那些不經(jīng)常使用的緩存

    Bitmap bmpToDraw=mCahe.get(filename);
    if(bmptToDraw ==null){
    bmpToDraw=BitmapFactory.decodeFile(filename);
    mCache.put(filename,bmpToDraw);//將Bitmap對(duì)象加入對(duì)象池
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容