这篇文章用于记录我研究 Android 服务里的 [onStartCommand(Intent, int, int)](https://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int)) 方法的结果。
public int onStartCommand(final Intent intent, int flags, final int startId) {}
该方法如上,其中有三个参数:intent
用于调用的时候传递数据进来,flags
用于标识本次调用是否为重复调用,startId
是系统分配的 id,每次启动都会递增,可以理解为任务 id。
onStartCommand flags 参数
- 若重新传入之前没有结束的任务,其值为
Service.START_FLAG_REDELIVERY = 1
。 - 没有收到返回的情况,再次调用该方法,其值为
Service.TART_FLAG_RETRY = 2
。
onStartCommand 返回值
以下值皆是 Service 的静态常量。
-
START_STICKY_COMPATIBILITY
兼容低版本,与START_STICKY
作用相同,但不保证每次都能重启成功。 -
START_STICKY
进程被杀死后,会自动重启服务,并回调onStartCommand
方法,但是 Intent 可能为空,程序必须做判断,否则崩溃。 -
START_NOT_STICKY
进程被杀死后,重启 APP 的时候不会重建服务。 -
START_REDELIVER_INTENT
在服务运行的过程中,进程被杀死后,再次启动程序时会自动重启 Service,并回调该方法,继续执行未完成的任务。使用该返回值的时候,必须手动停止任务,管理服务的生命周期,否则容易出现内存泄露。
网友评论