一、startService()

1、第一次启动service

onCreate()  ->  onStartCommand() -> (此时service已经在运行) -> (我们代码中调用 stopService()) -> onDestroy()

ok 这个就是一场单独startSever() 启动service的一次完整的生命周期

 

2、第二次启动service(这个第二次启动 前提是service没有onDestroy(),不然还是啥第二次呢,这是我的废话忽略)

onCreate() -> onStartCommand() ->(此时service已经在运行) -> (我们代码中继续调用 startService())-> onStartCommand()

yes!,直接调用onStartCommand(),因为该service实例已经存在 不需要调用onCreate()

 

注意:一个组件启动一个服务 ,启动后组件就不管这个服务了,爱干嘛干嘛,就是组件被销毁,服务还是存在的。同样组件和该服务是不能直接通信的哦!

 

二、bindServer()

1、第一次绑定服务

onCreate() -> onBind() -> (此时service已经在运行) -> (我们代码中调用 unbindService() 或者 绑定该service的组件被销毁) -> onDestroy()

2、第二次绑定服务

这个时候你肯定大喊我知道 肯定不会调用onCreate() ,然后直接调用onBind()

嘻嘻,你错了哦,不会调用onCreate(),是对的,但是也不会再次调用onBind(),因为只需要绑定一次就足够!

 

注意:一个组件绑定一个服务 这个时候他们只联系在一起的 ,组件被销毁  这个service也被销毁  ,同样,既然绑定了那肯定能通信,这个通信以后在细说,本章只说生命周期。

 

Service生命周期的特殊存在 ,一个服务可以被启动也可以同时被绑定 ,关键点 :启动服务 然后stopservice 如果该服务被其他组件绑定的话,这个时候这个service不会被销毁 除非绑定它的组件与它解绑 这个service才能被销毁。同理同时绑定 和启动一个服务 解绑后 这个服务 不会直接销毁 除非stopservice 这个service才能被销毁。总结一句话:一个服务同时被启动和绑定的话,只有全部 取消绑定和stop 这个服务才能被销毁 ,不然组件会说:这个服务我正在用呢,你TM可不能销毁!