2011-10-18 78 views
8

我在Eclipse中使用MAT工具來調查內存泄漏問題,並發現偶爾會有CookieSyncManager線程實例泄漏我的活動。從我的活動GC根的路徑如下:由CookieSyncManager引起的內存泄露(活動泄漏)?

com.mycompany.myapp.MyActivity 
    --> mContext com.android.internal.policy.impl.PhoneFallbackEventHandler 
    --> mFallbackEventHandler android.view.ViewRoot 
     --> target android.os.Message 
     --> <java local> java.lang.Thread CookieSyncManager Thread 

MyActivity稱爲CookieSyncManager.createInstance(this.getApplicationContext());在onCreate()中,但它不使用任何webview。它只包含一些動畫。我不明白爲什麼它被CookieSyncManager泄漏。有人可以幫忙嗎?

謝謝。

+0

任何webview ...? – Blackbelt

+0

沒有webview。 CookieSyncManager被其他活動使用,但不是此活動。 – Kai

+0

我放棄..對不起 – Blackbelt

回答

1

您可以調用CookieSyncManager.createInstance(this.getApplicationContext());使用只包含對實際上下文的弱引用的上下文包裝器。

在這種情況下,您會將所有調用委託給弱引用的上下文,當沒有其他強引用時它會自動清除。只要確保在訪問像這樣的實際上下文之前執行空檢查。

Context realContext = mMyWeakReference.get(); 
if (realContext != null) { 
    // delegate call to real context 
    realContext.delegateToWhateverFunctionWasCalled(); 
} 

將其存儲在本地變量中很重要,並且可以防止在代碼運行時清除引用時的npe。

這有點看起來像一個潛在的框架問題,但如果框架稍後清除此引用,它也應該沒問題。在這種情況下,它可能根本不是真正的問題,只是一個誤報。