Service onStartCommand 备忘

onStartCommand方法实在Android2.0(API Level 5)中引入的,用来替代之前的onStart方法。onStart方法在2.0以后就不推荐使用了。好吧关于Service这里先不多说。如果想了解的可以看看这个http://www.cnblogs.com/zhangdongzi/archive/2012/01/08/2316711.html 说的很详细了。

 

当Service启动时就会执行onStartCommand方法来处理任务。

public int onStartCommand(Intent intent, int flags, int startId) {

 

return super.onStartCommand(intent, flags, startId);

 

}

 

第一个参数

启动Service时传入的Intent。

Intent intent = new Intent(this,MyService.class);

startService(intent);

 

第二个参数:

主要用来找出Service的启动方式(例如:在Service结束前被意外的终止了)

START_FLAG_REDELIVERY:表示Intent参数是由系统在调用stopSelf()终止Service之前被终止后重新传递的。(有点绕口,说白了就是在系统调用stopSelf终止Service之前已经被终止了)

FLAG_RETRY:表示Service已经在异常终止后重新启动,如果Service之前被设为“START_STICKY”,则会传入这个表示

第三个:暂时没用过

返回值

请注意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_COMPATIBILITYSTART_STICKY的兼容版本,但不保证服务被kill后一定能重启。

 

原文地址:https://www.cnblogs.com/ywtk/p/3817696.html