2012-06-19 80 views
1

我的android應用程序泄漏,我應該檢查什麼?我的android應用程序泄漏,我應該檢查什麼?

我看了一下avoiding memory leaks,我在活動的onDestroy()方法中添加了一些unbindDrawables()調用來清理,但沒有任何改變。我也通過getApplicationContext()來替換每一個getContext()調用,但是沒有任何改變。

我監測DDMS日食角度堆大小:當我啓動應用程序,第一次有3MB的分配和後10關閉/重新啓動還有的10Mb的分配。

我的看法主要是由從LinearLayout中的一個子類繼承ViewFlippers和許多嵌套佈局。

編輯:

運行MAT,以確定泄漏後,犯罪嫌疑人的主要問題是:

16 instances of "org.apache.http.impl.conn.tsccm.ConnPoolByRoute", 
loaded by "<system class loader>" occupy 4,000,328 (44.08%) bytes. 

回答

1

如果您使用getApplicationContext()所有的地方然後確保你正在泄漏內存!這通常是一個壞主意。你需要在適當的地方使用適當的上下文。

採取堆轉儲,使用一個分析器(MAT一樣或與jHat),並期待在不應該在那裏(活動應該已被破壞)的情況下。按照參考鏈回來,找出爲什麼他們沒有得到回收。

+0

好是什麼意思呢? 「嘗試使用背景的應用,而不是上下文活動」 – Alexis

+0

如果你使用,你應該使用活動場景則是因爲應用程序上下文應只用於「長期」的對象,你會泄漏內存的應用程序上下文。沒有規定說,如果你有4MB的HTTP連接池,那麼也許你沒有正確關閉您的HTTP連接,以騰出資源(緩衝區)「如果您使用的應用程序上下文,你不會泄漏內存」 –

+0

。到處檢查您使用http連接是否正確關閉連接。 –

相關問題