20

我正在为我的 Android 应用程序编写服务,并试图了解绑定机制是如何工作的。如果我在活动的 onCreate 中绑定我的服务,但我没有在 onStop 或 onDestroy 中取消绑定,我会收到错误消息:

android.app.ServiceConnectionLeaked: Service com.google.ipc.invalidation.ticl.android.AndroidInvalidationService has leaked ServiceConnection com.googl
                              e.ipc.invalidation.external.client.android.service.ServiceBinder$1@4177f8f8 that was originally bound here

所以我的问题是:泄漏连接到底有什么问题,我通过解除绑定我的服务来防止什么?

4

3 回答 3

47

通常,您的应用程序是唯一可以访问您的服务(或使用它)的应用程序。如果在此服务仍在运行的情况下销毁您的应用程序,则该服务不再具有用途。它将存在于内存中消耗资源但什么都不做。通过在完成后解除绑定或停止服务,您可以返回这些资源,以便其他应用程序可以使用它们。

想象一个孩子把玩具摊开在房间里然后离开。房子里的其他人(父母、兄弟姐妹和客人)对他们没有用处,必须在所有地方走来走去。玩具只是碍事。如果孩子把它们收起来,那么任何人都可以随心所欲地使用这个房间。

希望有帮助!

于 2012-09-06T21:17:14.017 回答
41

当 Android OS 销毁Activity并发现 aServiceConnection仍然绑定到 running时会发生这种情况Service,因此您需要在销毁您的服务之前取消绑定服务Activity

于 2012-09-06T21:09:23.940 回答
4

即使活动关闭,服务仍在运行。所以需要在 onStop 或 onDestroy 中解绑资源。

于 2015-04-12T11:41:32.070 回答