同意文档可以更清晰。他们想说的是:
- 如果您调用 startService(),则服务将继续运行,除非您调用 stopSerivce()(或从服务内调用 stopSelf())
- 如果您调用 bindService(),则服务将继续运行,除非您调用 unbindService()
- 因此,如果您同时调用 startService() 和 bindService(),那么服务将继续运行,直到您同时调用 stopService 和 unbindService()。两者都不会单独停止服务。
创建了一个非常简单的活动和服务并运行以下启动/停止/绑定/取消绑定序列。我观察到这些电话给出了以下结果。
绑定-解绑
bindService() caused:
onCreate()
onBind()
unbindService() caused:
onUnbind()
onDestroy()
开始绑定解除绑定停止
startService() caused:
onCreate()
onStartCommand()
bindService() caused:
onBind()
unbindService() caused:
onUnbind()
stopService() caused:
onDestroy()
开始-绑定-停止-解除绑定
startService() caused:
onCreate()
onStartCommand()
bindService() caused:
onBind()
stopService() caused:
-- nothing
unbindService() caused:
onUnbind()
onDestroy()
绑定-开始-停止-解除绑定
bindService() caused:
onCreate()
onBind()
startService() caused:
onStartCommand()
stopService() caused:
-- nothing -- still running
unbindService() caused:
onUnbind()
onDestroy()
绑定开始解除绑定停止
bindService() caused:
onCreate()
onBind()
startService() caused:
onStartCommand()
unbindService() caused:
onUnbind()
stopService() caused:
onDestroy()
如您所见,在调用 bind 和 start 的每种情况下,服务都会一直运行,直到 unbind 和 stop 都被调用。解除绑定/停止的顺序并不重要。
这是从我的简单测试应用程序中的单独按钮调用的示例代码:
public void onBindBtnClick(View view) {
Intent intent = new Intent(MainActivity.this, ExampleService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}
public void onUnbindBtnClick(View view) {
if (serviceIsBound) {
unbindService(serviceConnection);
serviceIsBound = false;
}
}
public void onStartBtnClick(View view) {
Intent intent = new Intent(MainActivity.this, ExampleService.class);
startService(intent);
}
public void onStopBtnClick(View view) {
Intent intent = new Intent(MainActivity.this, ExampleService.class);
exampleService.stopService(intent);
}