안 드 로 이 드 이미지 메모리 최적화

여기에 놓 고 참고 하 세 요.
         。      setImageBitmap、setImageResource、BitmapFactory.decodeResource       ,         decode ,      java  createBitmap    ,        。  ,     BitmapFactory.decodeStream  ,     bitmap,     ImageView source,decodeStream            JNI>>nativeDecodeAsset()   decode,     java  createBitmap,     java    。           Config  ,             ,             。  ,decodeStream            ,                 ,   decodeStream  ,   hdpi mdpi,ldpi          ,                  (     ),           。

InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10;   //width,hight        
Bitmap btp =BitmapFactory.decodeStream(is,null,options);

if(!bmp.isRecycle() ){
         bmp.recycle()   //         
         system.gc()  //        
}

/**
  *                  
  * @param context
  * @param resId
  * @return
  */
publicstatic Bitmap readBitMap(Context context, int resId){  
      BitmapFactory.Options opt = new BitmapFactory.Options();  
      opt.inPreferredConfig = Bitmap.Config.RGB_565;   
      opt.inPurgeable = true;  
      opt.inInputShareable = true;  
//        
      InputStream is = context.getResources().openRawResource(resId);  
return BitmapFactory.decodeStream(is,null,opt);  
 }
 option      ,         ,SDK      2    ,           。

     
    Dalvik         。  Android    ,       Dalvik Java VM                    ,                                 GC  ,   dalvik.system.VMRuntime    setTargetHeapUtilization                。    :  
private final static float TARGET_HEAP_UTILIZATION = 0.75f;

    。
                。
  private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;
  VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
   //    heap   6MB  



1、            :
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inSampleSize = 2;
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 

        1.png    ,  、         1/2。      ,           。             ,inSampleSize    ,        。                ,                  。      moto              ,            ,         。

 

2、 ARBG_4444        :
Android    ,   :
ALPHA_8:      1byte  
ARGB_4444:      2byte  
ARGB_8888:      4byte  
RGB_565:      2byte  
Android        ARGB_8888,           ,      。    ,        。
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inPreferredConfig = Bitmap.Config.ARGB_4444;    
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 
       1.png ARGB_4444    。               ,         ,    ARGB_8888       。              ,        。  ,          。

3、     recycle()  :
                 。           ,             。                ,     Java           。      Java heap    ,     OutOfMemoryError   。            ,               ,    OutOfMemoryError   。     recycle()       “  ”  ,          。                         ,        。        setImageBitmap(Bitmap img)            ,          ,      。

4、  Matrix               :
    Matrix      ,          ,           。         ARGB_8888    ,      ARGB_4444       ,                  。                。
Matrix matrix = new Matrix();
float newWidth = 200;//        
float newHeight = 300;//        
matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());
Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//       
img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//  ARGB_4444       
img = null;
img1 = null;
                    img1。         img1,           。


                               。         ,         。                 。      ,           。   ListView    ,  convertView 。    AsyncTask    ,       ImageView    null。  AsyncTask        ,                     ,  GC    。     Android        ,recycle            ,       Java       。

좋은 웹페이지 즐겨찾기