Android开发基础——关于service的理解

Android开发基础——关于Service部分理解

Service的生命周期

Service有两种启动方式,对应的Service也有两种生命周期:

  1. startService
    第一次调用startService:回调顺序是onCreate -> onStartCommand
    重复调用startService:不会回调onCreate,但是会回调onStartCommand
    最后还要调用stopService: 会回调onDestroy
    startService不依赖启动的组件,即使启动组件销毁也不会影响该Service在后台运行。
  2. bindService
    第一次调用bindService: 回调onCreate -> onBind
    重复调用bindService: 不会回调onCreateonBind
    最后还要调用unbindServiceonUnbind -> 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后一定能重启。

猜你喜欢

转载自blog.csdn.net/meak_962/article/details/80162798