2013-03-27 68 views
0

我遇到了內存不足的問題,因此我決定在開始新活動之前清理背景。開始新活動後清除背景

它的工作原理,但我有一個壞的副作用,我有一個黑色的屏幕之前,一個新的活動開始。

這是我的代碼:

我將在這裏:

@Override 
protected void onResume() { 
    super.onResume(); 

    bg.setBackgroundDrawable(new BitmapDrawable(decodeSampledBitmapFromResource(getResources(), R.drawable.bg, sizeWigth, sizeHeight))); 

} 

我在這裏清除:

@Override 
protected void onPause() { 
    super.onPause(); 
    bg.setBackgroundDrawable(null); 
    System.gc(); 
} 

你有什麼想法解決它?

+0

爲什麼不使用'bg.setBackgroundResource(R.drawable.bg);'?或者更好的是,爲什麼不把它設置爲XML? – Shade 2013-03-27 22:31:53

回答

1

當裝載大圖片請務必遵循以下規則

  1. 負載根據您的屏幕DPI的圖像。如果你的屏幕很小,沒有理由把巨大的圖像加載到內存中。

  2. 位圖採樣。讀取this用於對大圖像進行二次採樣

  3. 監視您的HeapSize並使您在加載圖像以進行其他處理後有足夠的空間。檢查此link

  4. 使用java引用加載圖像。確保在圖像爲空時重新加載圖像。這將幫助您避免內存不足問題。

    System.gc();

是垃圾收集器的提示,並且它們不能保證垃圾收集器在執行該行後收集垃圾。

將此圖像放在XML佈局上不會幫助您解決內存問題。