我完全按照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成为一个单独的类而不是内部类,但这并没有帮助。感谢。
编辑:当服务不是前台服务时,问题仍然存在。
答案 0 :(得分:0)
嗯,我认为这根本不是内存泄漏,只是Android会在应用程序重新启动时将进程保留在内存中,如下所述: