【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()方法
结束