代码之家  ›  专栏  ›  技术社区  ›  joe_deniable

FinalizerReference导致Service Binder内存泄漏

  •  4
  • joe_deniable  · 技术社区  · 7 年前

    我创建了一个绑定服务,正如Android文档中所述: https://developer.android.com/guide/components/bound-services.html#Binder

    我的代码与示例中的代码完全相同,一直到字母。我有相同的LocalBinder内部类扩展Binder并返回封闭服务。我的活动绑定到服务,在ServiceConnection回调中从绑定器获取对服务的引用,并使用该引用调用服务中的方法。它在onStart中绑定,在onStop中解除绑定,如示例代码所示。

    当我的活动退出时,它会发送一个本地广播。当服务接收到该广播时,它调用stopForeground()(这是一个前台服务),然后调用stopSelf()。然后调用其onDestroy()方法。然而,有一个问题。该服务的LocalBinder实例保留在内存中,因为它由Android的FinalizerReference引用。许多其他导入的类和系统类也保留在内存中。

    有人知道为什么LocalBinder引用保留在FinalizerReference队列中吗?这就是导致其他类保留在内存中的原因吗?我曾尝试将LocalBinder作为一个单独的类而不是一个内部类,但这并没有帮助。谢谢

    编辑:当服务不是前台服务时,问题仍然存在。

    1 回复  |  直到 7 年前
        1
  •  0
  •   joe_deniable    7 年前

    我认为这根本不是内存泄漏,只是Android在应用程序重启时将进程保留在内存中,如下所述:

    https://stackoverflow.com/a/1982992/2340402