我创建了一个绑定服务,正如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作为一个单独的类而不是一个内部类,但这并没有帮助。谢谢
编辑:当服务不是前台服务时,问题仍然存在。