4

就我而言,我有兩項活動叫做A(主要活動)和B(兒童活動)。 A會啓動B(B有一些使用Glide圖像庫加載圖片的東西)。爲什麼在完成活動後android不清理內存?

如果我採用了android內存監視器獲得內存分配,我可以清楚地看到內存分配grows.That完全是很好的,因爲我們正在做活動B.Image一些圖片有關的東西附着。

enter image description here

所以我的問題是,如果我在活動B按下後退按鈕它會在活動A和分配的內存不會cleared.Memory分配將仍然相同。

這是正常的機器人的行爲呢?

如果不是我怎麼能手動清理內存?

我手動運行GC,但同樣的結果沒有運氣:(如下。

在活動B

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     System.gc(); 
    } 
+1

據我所知,GC只會在真正需要的時候運行(沒有更多的堆空間),沒關係。否則,請確保沒有任何內容引用該內存(檢查靜態引用),並確保清除了一些Android特定的資源。 – Spidey

+0

您是否找到任何解決方案? – fish40

回答

0

1)OnDestroyfinish();被稱爲被調用時,只需按下返回鍵韓元除非你編程這麼做,否則不會調用這個方法。

2)System.gc();中的onDestroy是行不通的,因爲你的activity B仍然活躍在onDestroy。一旦activity B完全終止,您應該從其他活動中調用此項。

3)如果您將活動上下文泄漏到長壽命對象/線程等,則即使調用onDestroy,活動仍會保留在內存中。 (內存泄漏)

注意:調用System.gc();不會簡單地釋放您的內存,它可能不會執行GC取決於情況。在這裏看到詳細信息:Why is it bad practice to call System.gc()?