Android开发基础——关于Service部分理解
Service的生命周期
Service有两种启动方式,对应的Service也有两种生命周期:
- startService
第一次调用startService:回调顺序是onCreate -> onStartCommand
重复调用startService:不会回调onCreate,但是会回调onStartCommand
最后还要调用stopService: 会回调onDestroy
startService不依赖启动的组件,即使启动组件销毁也不会影响该Service在后台运行。 - bindService
第一次调用bindService: 回调onCreate -> onBind
重复调用bindService: 不会回调onCreate 和 onBind
最后还要调用unbindService :onUnbind -> onDestroy
bindService依赖启动的组件,启动组件销毁该Service也会销毁。
如果同时使用呢:
反正onCreate只回调一次,时机是第一次调用startService或bindService,顺序无所谓。onDestroy 也只回调一次。时机是分别调用unbindService和stopService后,已最后调用方法为回调时机,顺序依然无所谓。
onStartCommand的返回值
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由 于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传 递到service,那么参数Intent将为null。
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。