2011-02-16 90 views
1

閱讀了一些關於性能的文章後, 無法準確獲取此聲明。瞭解Android應用程序中的內存泄漏

「當被拉伸附連到的視圖,該視圖被設置爲在可拉伸的回調」
溶液:「設置所存儲的可繪回調當活動被破壞爲null」

這是什麼意思,例如

在我的應用程序,我初始化的onCreate()這樣的ImageButton的,

imgButton= (ImageButton) findViewById(R.id.imagebtn); 

在後一階段,我從一個URL獲得的圖像,得到了流,轉換至繪製,並設置圖像BTN這樣,

imgButton.setImageDrawable(drawable); 

按照上面的說法,當我離開我的應用程序,例如在的onDestroy() 我必須設置存儲可繪回調爲null,無法理解這部分!在這個簡單的情況下,我必須設置爲空?

我正在使用Android 2.2 Froyo,無論這種技術是必需的還是不必要的。

回答

4

只有當您將drawable保存爲某個靜態字段或某種類型的緩存時,您才需要這樣做。在這種特殊情況下,沒有理由將回調設置爲空。

+0

感謝羅曼蓋伊!我從你的文章中獲得了性能提示。 我異步加載我的圖像。從接口我得到的繪圖資源,像 aLoader.loadDrawable(IMAGEURL,新getImageDrawable(){ \t \t \t公共無效imageLoaded(可繪製繪製,字符串IMAGEURL){ \t \t \t \t \t \t imgBtn.setImageDrawable(繪製) ; \t \t} }); 這裏,因爲我按價值接受了drawable,它會被認爲是緩存! – sat 2011-02-16 07:38:53

2

這裏正是爲例子,你提到的情況:

  1. 電話朝向已改變,這應該意味着老年活動應該是「傾銷」和新的創造
  2. 如果你有存儲對位圖的引用作爲靜態字段,它引用了本來應該轉儲的舊活動(可繪製引用TextView,視圖引用了活動)
  3. 新活動已創建,但您的drawable仍然有引用老的一個,老的一個不能被傾倒。

當然,這一切都是正確的,如果你存儲繪製靜態像在引用的例子:

private static Drawable sBackground;