-
Service 的start和bind有什么区别
- startService
- 使用start启动Service,Service有独立的生命周期,不与组件绑定。
- 多次start启动Service,onCreate只会调用一次,onStartCommand会被调用多次.
3.不管调用几次startService,只要调用 stopSelf或者stopService便会使服务停止。此时onDestroy()会被调用
- bindService
- 使用bind绑定组件,Service会与组件绑定 。
- 多次绑定组件,onCreate和onBind只会调用一次。
- 组件调用unBindService与Service解除绑定,所有与Service绑定的组件与Service解除绑定后,Service停止,此时调用onUnbind()与onDestroy();
- startService
-
同一个Service,不当通过startService启动而且通过bindService绑定,如何把它停止掉。
必须满两个条件- 调用stopService/stopSelf
- 所有组件与Service解除绑定
最后一个stopService/stopSelf 或者 unBindService 触发onDestroy
-
onStartCommand的4种返回值的意义
文档- START_STICKY
如果服务被意外kill掉,保留服务为start状态,稍后尝试重启服务,但是不保留递送的Intent。Service被重建后,如果没有新的消息,Inent将会为null。 - START_NOT_STICKY
服务被意外kill掉,不尝试重启服务 - START_REDELIVER_INTENT
如果服务被意外kill掉,保留服务为start状态,稍后尝试重启服务,且保留递送的Intent。 - START_STICKY_COMPATIBILITY
START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
- START_STICKY
默认返回值为
START_STICKY或者START_STICKY_COMPATIBILITY。
- onStartCommand 中的flags参数的意义
flags参数对应onStartCommand的返回值- START_FLAG_REDELIVERY
对应START_REDELIVER_INTENT
表示 onStartCommand()之前返回过START_REDELIVER_INTENT,此Service意外被kill掉后系统重新创建Service,此时发送的Intent是之前保留的。 - START_FLAG_RETRY
应该对应START_STICKY
表示 onStartCommand()之前返回过START_STICKY,此Service意外被kill掉后系统重新创建Service,此时发送的Intent可能是null。 - 0
正常情况
- START_FLAG_REDELIVERY
- Service的onCreate,onStartCommand,onBind运行在什么线程
主线程
网友评论