2011-10-18 69 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。

这有点看起来像一个潜在的框架问题,但如果框架稍后清除此引用,它也应该没问题。在这种情况下,它可能根本不是真正的问题,只是一个误报。