Local Binder引用Service时发现内存泄漏

时间:2011-07-18 13:21:48

标签: android

我已经使用非静态内部类作为我所有服务的绑定器。但是当我运行MAT工具来检查内存泄漏时,我发现我的所有绑定器类都没有清楚。所以我发现以下两个与此问题相关的链接。

http://code.google.com/p/android/issues/detail?id=6426

以下链接讨论了一种解决方法:使用弱茶点 http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android

  1. 由于这是当前版本的android SDK的一个已知问题,是否有想法何时修复?
  2. 2.上面提供的解决方案是一种被推荐的方法?或者有任何解决方法需要修复。

    3除此之外,使用活页夹模式时会引入什么类型的内存泄漏。

    萨姆

    我正在使用Android SDK 2.2。

1 个答案:

答案 0 :(得分:2)

当您通过Binder将回调对象传递给服务时,我发现了类似的泄漏问题:Binder preventing garbage collection

我相信当你绑定到服务时,在取消绑定之前可能不会收集ServiceConnection对象。因此,理想情况下,您的ServiceConnection不应该保留消耗大量内存的任何内容,或者在连接正在进行时可能需要收集垃圾的内容。这意味着非静态内部类可能不是一个好主意,因为非静态内部类具有指向其父级的指针,这意味着在关闭连接之前不会对父进行垃圾回收。

我不认为这是可以真正解决的问题,只要有连接就必须保持ServiceConnection对象的存活,我们的用户工程师只需要注意可能产生的副作用。有