我是否需要同时为Android服务调用unbindService和stopService?

在我的Android应用程序中,我同时调用startServicebindService

 Intent intent = new Intent(this, MyService.class); ServiceConnection conn = new ServiceConnection() { ... } startService(intent) bindService(intent, conn, BIND_AUTO_CREATE); 

稍后,我尝试unbindService and stopService`:

 unbindService(conn); stopService(intent); 

但是,我在unbindService调用中unbindServiceexception。 如果我删除这个调用,应用程序似乎通过stopService调用正常运行。

难道我做错了什么? 我认为一个bindService调用必须与一个unbindService调用相关联,并且一个startService调用必须与一个stopService调用相关联。 虽然这似乎并不是这种情况。

Solutions Collecting From Web of "我是否需要同时为Android服务调用unbindService和stopService?"

stopService()的Android文档声明:

请注意,如果停止的服务仍然使用BIND_AUTO_CREATE集绑定了ServiceConnection对象,则在所有这些绑定都被删除之前,它将不会被销毁。 有关服务生命周期的更多详细信息,请参阅服务文档。

因此,先调用stopService()然后再调用unbindService()应该可以工作(这对我unbindService() )。

我碰到这个问题:

确保您在调用bindService的相同上下文中调用unbindService。 在我的情况下,我正在做以下绑定:

 Context c = getApplicationContext(); c.bindService(...); 

然后解开它,只是:

 unbindService(...); 

确保绑定和解绑使用相同的上下文解决了这个问题。

正如你在这里看到的,这取决于你想要实现什么以及如何绑定服务。 如果要长时间引用该服务,最好使用bindService而不是startService。 如果在bindService方法中使用了标志BIND_AUTO_CREATE,那么你不必调用startService,因为服务在必要时启动。

如果您调用unBind服务,那么您对服务的关联被删除。 你不必明确停止服务,但你可以。 但重要的是要注意,如果你调用unBind(),那么服务可以随时停止。