Service 的生命周期回调主要有这些,onCreate、onStartCommand、onDestroy、onBind、onUnbind、onRebind。
根据启动方式的不同,回调又会有不同的顺序,下面列举一下各种情况下,回调的顺序:
单种方式启动分两种情况:
- 使用 startService 启动 Service。
其生命周期为:onCreate -> onStartCommand -> onDestroy
第一次调用 startService 方法会先回调 onCreate,接着回调 onStartCommand。之后再调用 startService 时,不会再回调 onCreate,只会回调 onStartCommand。
当调用 stopService 或 Service 内部调用 stopSelf 方法时,Service 会停止运行并销毁,此时回调 onDestroy。
- 使用 bindService 启动 Service
其生命周期为:onCreate -> onBind -> onUnbind -> onDestroy
第一次调用 bindService 时会先回调 onCreate,再回调 onBind。之后再次调用 bindService,两个方法都不会再次回调。
当调用 unbindService 方法时,会先回调 onUnbind,再回调 onDestroy。
两种方式混合又分两种情况:
- 先 startService,再 bindService。回调 onCreate -> onStartCommand -> onBind
此时如果先调用 unbindService,只会回调 onUnbind。再调用 stopService,才会回调 onDestroy。
如果先调用 stopService,不会回调任何方法,再调用 unbindService,将会先后回调 onUnbind 和 onDestroy。
另外,如果在 onUnbind 方法返回 true,且调用 unbindService,但不调用 stopService。那么这时再次调用 bindService 的话,不会回调 onBind,而是回调 onRebind 方法。
- 先 bindService,再 startService。回调:onCreate -> onBind -> onStartCommand
之后调用 unbindService 和 stopService后,生命周期的回调和上面第一种情况一样。