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ì)象池
}