CookieSyncManager导致内存泄露(活动泄漏)?

时间:2011-10-18 17:06:04

标签: android

我在Eclipse中使用MAT工具来调查内存泄漏问题,发现有时,CookieSyncManager线程实例会泄漏我的活动。从我的活动到GC根的路径如下:

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泄露了。有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你可以调用CookieSyncManager.createInstance(this.getApplicationContext());使用仅包含对实际上下文的弱引用的上下文包装器。

在这种情况下,您可以将所有调用委托给弱引用的上下文,当没有其他强引用时,该上下文将自动清除。只需确保在访问像这样的实际上下文之前执行空检查。

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

将其存储在局部变量中很重要,并且可以在代码运行时清除引用时阻止npe。

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

相关问题