Android:如何使用BIND_AUTO_CREATE选项停止bindService()启动的服务?

时间:2010-11-18 16:25:36

标签: android service bind

我使用以下方式开始服务:

private ServiceConnection _serviceConnection = new ServiceConnection() {...}
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

我想'重启'这项服务。 (我们不要争论为什么我要那样做) 我是这样做的:

unbindService(_serviceConnection);
// Do some initialization on service
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

我注意到服务没有死(onDestroy不运行),直到我调用下一个bindService(); 因此,我在服务上做的一些静态初始化已被onDestroy()实现清除。

问题:如何确保unbindService()将停止服务(运行onDestory()), 以便我可以在重新运行bindService()后进行初始化?

3 个答案:

答案 0 :(得分:4)

  

问题:如何确保unbindService()将停止服务(运行onDestory()),以便我可以在重新运行bindService()之后进行初始化?

onDestroy()之后unbindService()的时间是不确定的,当然是异步的。您也可以尝试自己调用stopService(),但这也是异步的,因此您不知道何时会停止它。

我不知道使用绑定模式“重启”服务的可靠方法。

答案 1 :(得分:4)

即使在致电unbindServicestopService之后,Android仍可自行决定是否保留服务。

如果您需要立即重新初始化服务端的某些数据,您很可能需要提供一种服务方法。

答案 2 :(得分:0)

如果在onUnbind()中返回true,则可以使用onRebind()。

见这里: http://developer.android.com/guide/components/bound-services.html