Service 的 onStartCommand()方法的返回值问题

 Service 的 onStartCommand()方法的返回值问题

 

首先学一下单词

sticky:粘的

 

Redeliver再投递,再交还

 

Compatibility[kəm,pætə'bɪləti   兼容性

 

 

返回值有一下几种

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

1. START_STICKY

在运行onStartCommand后service进程被kill后,那将保留在开始状态,但是不保留那些传入的intent。不久后service就会再次尝试重新创建,因为保留在开始状态,在创建     service后将保证调用onstartCommand。如果没有传递任何开始命令给service,那将获取到null的intent。

 

2.START_NOT_STICKY,

 

在运行onStartCommand后service进程被kill后,并且没有新的intent传递给它。Service将移出开始状态,并且直到新的明显的方法(startService)调用才重新创建。因为如果没有传递任何未决定的intent那么service是不会启动,也就是期间onstartCommand不会接收到任何null的intent

3. START_REDELIVER_INTENT,

在运行onStartCommand后service进程被kill后,系统将会再次启动service,并传入最后一个intent给onstartCommand。直到调用stopSelf(int)才停止传递intent。如果在被kill后还有未处理好的intent,那被kill后服务还是会自动启动。因此onstartCommand不会接收到任何null的intent。

 

 

4. TART_STICKY_COMPATIBILITY

 

START_STICKY,的兼容版本,但不一定保证Service在被kill掉以后,能执行onStartCommand()方法

 

 

 

 

 

 

如何保证Service不被kill掉

 

 

public final void setForeground (boolean isForeground)已经弃用,被public final void startForeground (int id, Notification notification),代替

 

通过Service的public final void startForeground (int id, Notification notification),使其在StatusBar显示一个Noficaiton,使该Service处于可见状态,进而增加生存级别。减少被kill掉的机会

你可能感兴趣的:(service)