Service两种启动模式的区别

说明: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对象,通过这个对象实现跟宿主交互。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值