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