我正在为我的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
所以我的问题是:泄漏连接的问题究竟是什么,我通过解除服务绑定来阻止什么?
答案 0 :(得分:44)
通常,您的应用是唯一可以访问您的服务(或有用途)的应用。如果在此服务仍然运行的情况下销毁您的应用程序,则该服务不再具有目的。它将存在于内存消耗资源中,但什么都不做。通过在完成后解除绑定或停止服务,您可以返回这些资源,以便其他应用程序可以使用这些资源。
想想一个孩子将玩具传播到一个房间然后离开。房子里的其他人(父母,兄弟姐妹和客人)对他们没用,必须四处走动。玩具简直就是这样。如果孩子把它们拿走,那么任何人都可以随意使用房间。
希望有所帮助!
答案 1 :(得分:37)
Activity
并发现A ServiceConnection
仍然绑定到正在运行的Service
时会发生这种情况,因此您需要先Unbind
该服务然后销毁Activity
1}}
答案 2 :(得分:2)
即使在活动结束后,服务仍在运行。因此,您需要在onStop或onDestroy中取消绑定资源。