service开启的两种方式有:startService方式和bindService方式两种方式的异同已经在link. 中进行阐述了!
下面再重新整理一遍:
onStart()已经弃用了,用onStartCommand()代替了!
启动方式 | 优点 | 缺点 | 生命周期 | 特点 |
---|---|---|---|---|
startService | 服务可以长期在后台运行 | 不能进行通讯 | onCreate()------>onStrartCommand() ------>onDestroy() | oncreate()方法只会启动一次,如果服务已经启动,onCreate()方法不会再被执行,除非被onDestroy了 |
bindService | 可以进行通讯 | 服务无法长期在后台运行,不然会导致context泄漏,如果解绑了服务则停止运行 | onCreate()------>onBind()------>onUnBind()------>onDestroy | 该方法下多次绑定会有异常 |
————————————————————————————————————————————————
为了结合两种启动方式的优点,可以使用混合方式启动服务!
该方式下service的生命周期:
- 开启服务后绑定服务,如果不解绑服务,则无法停止服务
- 开启服务后若多次绑定-解绑服务,服务不会被停止,只能通过stopService()方式停止服务
该方式下的开发步骤:
- 开启服务:startService(),确保服务可以长期在后台运行
- 绑定服务:onBind(),为了使服务能够进行通讯
- 调用服务内部的方法
- 解绑服务:unBindService(),退出activity
- 停止服务:stopService()