【问题标题】:Service Binder memory leak caused by FinalizerReference由 FinalizerReference 引起的 Service Binder 内存泄漏
【发布时间】:2018-08-27 08:11:26
【问题描述】:

我已经完全按照此处的 Android 文档中的描述创建了绑定服务: https://developer.android.com/guide/components/bound-services.html#Binder

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

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

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

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

【问题讨论】:

    标签: android memory-leaks


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2019-01-08
      • 2014-02-18
      • 2010-09-09
      相关资源
      最近更新 更多