说明:service是一种服务,运行在主线程上,需要依托Android程序运行,不能做耗时操作
1.startService
生命周期:onCreate()—— onStartCommand() —— onDestory()
启动完之后该service就在后台运行,其生命周期跟启动它的context没有关系,也不能跟context通讯
2.bindService
生命周期:onCreate()—— onBind()—— onUnbind() —— onDestory()
启动完之后生命周期跟它的context有关,比如activity、fragment等,在context解绑之后,如果service没有跟其他的绑定也就结束了(一个service可以跟多个context绑定,只有所有的context全部解绑,service才会结束)
startService
用startService 方式启动Service的时候重写onStartCommand()的方法。每次用该方式启动Service的时候都会调用改方法。
返回值是一个int类型的:
- START_STICKY: 当Service因内存不足而被系统kill后,一段时间后内存再次空闲时,系统将会尝试重新创建此Service,一旦创建成功后将回调onStartCommand方法,但其中的Intent将是null,除非有挂起的Intent,如pendingintent,这个状态下比较适用于不执行命令、但无限期运行并等待作业的媒体播放器或类似服务。
- START_NOT_STICKY:当Service因内存不足而被系统kill后,即使系统内存再次空闲时,系统也不会尝试重新创建此Service。除非程序中再次调用startService启动此Service,这是最安全的选项,可以避免在不必要时以及应用能够轻松重启所有未完成的作业时运行服务。
- START_REDELIVER_INTENT:当Service因内存不足而被系统kill后,则会重建服务,并通过传递给服务的最后一个 Intent 调用 onStartCommand(),任何挂起 Intent均依次传递。
- START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
bindService
bindService的方式启动Service,其作用是该Service可以跟启动它的context进行通信。其是ServiceConnection的接口方法和服务器交互,在绑定即onBInd() 的时候回调。在这个方法中获取Service传递过来的额IBinder对象,通过这个对象实现跟宿主交互。