Thursday, December 15, 2011

使用View.RemoveAllView()來節省你的記憶體

一般的認知,
節省記憶體的方式就是使用
  
  object = null;
 

但是,這麼做不一定就能釋放掉記憶體,
因為可能object被其它的元件reference(參照)了。


如果是View上面的ImageView想要完整的被GC掉,
可以試看看View.removeAllView()。

假設今天我有一堆圖片,
想要使用動態的方式增加在LinearLayout上,
而且這個LinearLayout是Vertical排列方式。
  
   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //在畫面上放30張圖
        for(int i =0;i<30;i++){
         Bitmap bmp = null;
         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.a55807);

         
         img = new ImageView(this);
         img.setImageBitmap(bmp);

         ll = (LinearLayout) findViewById(R.id.linearLayout1);
         ll.addView(img);
        }
        
    }
 

當使用者按下返回鈕關閉程式時,
覆寫onBackPressed()來清除記憶體,
寫法如下︰
  
   @Override
 public void onBackPressed() {
     //移除畫面上的所有圖 
     ll.removeAllViews();
    super.onBackPressed();
 }
 

經實測,
removeAllView()能最直接的將記憶體清除。
每當再次重開軟體時,
並不會造成記憶體累積。

No comments: