startservice与bindservice混合使用

 

【start】
oncreate()
onstart()

【bind】
没有打印信息

【stop】
没有打印信息                 

【unbind】
unbind
destory()

服务已经被停止了

 

一个服务被stop之后不一定会被destory()
但是如果destory()了一定被stop了
停止服务 和 销毁服务 是两个概念

如果一个被停止的服务仍然有ServiceConnection对象通过BIND_AUTO_CREATE绑定到它上面,它不会被销毁直到绑定对象被移除

有了这个我们理解了 为什么有这样现象发生了 它只是stop了服务并没有销毁服务 所以 你点stop没有反应 但是这个时候 服务其实已经被停止了 你再点unbind因为所有绑定到服务上的客户端都已经解绑定了 所以android 操作系统就销毁了 这个 service

网上有很多人 有误解 认为 只要绑定到服务上的客户端全部解绑定了 这个服务就被销毁了 其实也错了 看下面这段原文:

第一段话的意思是:

如果你同意你的服务被开启和绑定,然后当服务被开启的时候,当所有的客户端都解除对服务的绑定android操作系统也不会销毁这个服务,相反的你必须显示的调用stopSelf()

或者stopService()方法来停止服务

第二段话的意思是:

当最后一个客户端从服务上被解绑定的时候操作系统就销毁服务(除非这个服务是使用startService()的方式启动的)

从这两段话就可以看出 问题的所在了

然后 很多人 可能看到了这句话:

这句话 很明显 也是说 如果是startService 方式开启才不会被销毁 因为onstartCommand()很明显是一个 startService的生命周期中才有的回调函数

所以说 很多人觉得 他没有说 startService方式 但是也是 都解绑定之后就销毁了 应该是解绑定之后就会销毁 其实不是这样的! 它暗含的意思就是告诉你这个方式是startService()

好了 说了 这么多 总之这个程序的执行流程就是这样的:

startservice->调用oncreate()方法->stopservice->停止service但没有销毁->unbind->调用unbind方法调用destory()方法

结束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值