本文共 1375 字,大约阅读时间需要 4 分钟。
Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其它组件和Service的交互。Service的这两种状态是可以共存的。
start启动的Service,Service有独立的生命周期,不依赖该组件;多次调用start方法,会重复调用onStartCommand
方法;start启动的Service,必须通过stopService
或者stopSelf
来停止Service(IntentService会自动调用stopSelf
方法)。 多次调用bind方法,只会调用一次onBind
方法。bind绑定的Service,Service依赖于这些组件,这些组件全部销毁后,Service也随之销毁。 不论被startService
调用几次,只需stopService
(或stopSelf
方法)一次;调用n次bindService
方法,必须调用n次unbindService
方法。需要注意的是,若同一个组件多次bind一个Service,不需要多次调用unbind,只需要一次。
stopService
(或stopSelf
方法)和n次unbindService
方法,执行顺序没有要求,最后一个 stopService
或者unbindService
方法会导致Service的onDestroy
执行。 一共有如下四种返回值:
onStartCommand
会被再一次调用。public static final START_STICKY_COMPATIBILITY = 0
onStartCommand
方法。 如果接下来没有其它start命令,intent会为null
。因此,要注意onStartCommand
对intent的非空判断。public static final int START_STICKY =1
public static final int START_NOT_ STICKY = 2;
stopSelf()
方法),被杀死前最后一次传递的intent将重新被执,该flag将不会传递空intent。public static final in START_REDELIVER_INTENT = 3;
onCreate
、onStart
、onBind
等运行在哪个线程?Service默认是运行在主线程的,其生命周期方法也是运行在主线程。因此,如果想要在Service中执行耗时操作,必须另起线程(或者使用IntentService),否则可能会产生ANR。
转载地址:http://jnxqa.baihongyu.com/