2012-06-01 56 views
2

要清除所有後臺活動我做了以下內容:這種情況下的內存泄漏究竟是什麼?

我保持一個靜態數組列表,每當我去從一個活動到另一個活動,在新的活動的onCreate()方法,我添加的對象當前活動如下:

SomeClass.addActivity(CurrentActivity.this); 

我在每項活動中添加了上述說明。

的addActivity():

public void addActivity(final Activity activity) { 
      activityList.add(activity); 
     } 

而當我想以清除棧,我叫:

public boolean clearStack() { 
     for (Activity activity : activityList) { 
      activity.finish(); 
     } 
     activityList.clear(); 
     return (activityList.isEmpty()); 
    } 

就這樣,我清了活動堆棧。

但它產生了內存泄漏。這不是正確的做法。持續參考活動並不好。你們能解釋一下爲什麼以及在這種情況下究竟發生了什麼內存泄漏?

我用MAT月食找到我的應用程序此內存泄漏。

任何幫助將不勝感激。

回答

2

抱着活動引用它們的上下文外(當它們在後臺或「關閉」 /成品),導致內存泄漏 - Android操作系統想從記憶的「老」活動,清除,當它決定它的時候這樣做(你不能手動控制它)。

在這種情況下 - 垃圾收集器會嘗試從內存中釋放活動/活動,但是因爲某些事情(對活動的引用的數組)持有對它的引用 - 所以它不能被垃圾收集,所以它無法從內存中釋放它 - 這是一個內存泄漏的示例。

本文介紹如何避免內存泄漏:

http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

+0

清晰明瞭的解釋。謝謝 – Shrikant

+0

@Shrikant:如果你願意 - 我可以爲你提供更好的解決方案來清除背景活動 –

+0

Yaa。請告訴我。 – Shrikant

0

嘗試旋轉裝置幾次,看看happens-你最終會耗盡內存,因爲你仍然持有參考GC無法清除的先前上下文。

+0

雅,我知道,這就是爲什麼我問這個問題將完成theriself。 – Shrikant