Service 经历的生命周期较少,可以分三种情况记录。
注意点:
图示同上。
注意点:
注意点:
如果我们将 “开始有 client 发起 bindService”到“所有 client 都调用 unbindService”中间的过程视为一个“轮回”, 那么同一个服务的同一个运行生命周期(从 onCrete 到 onDestroy 之间)内,就有可能发生多次“轮回”。
onBind 主要用来产生一个 Binder,只需要知道同一个服务的 Binder 只会有一个,onBind 只会在第一个“轮回”调用一次,主要负责则 “Create Binder”。
onBind 与 onRebind 不会在一个“轮回”中同时被调用。
如果 bindService 操作触发了 onCreate 回调,那么,同时也会触发 onBind。
onUnbind 的返回值只会在服务运行期间从第二个“轮回”开始发生作用。 那如何才能出现第二个“轮回”?肯定只有在调用了 startService 的情况下,服务保持运行期间,才会有第二,第三个“轮回”。 否则,每一个“轮回”就都是第二种情况了。举个例子说明下:
第一个例子,onUnbind 返回 false
第二种例子,onUnbind 返回 true
ServiceConnection 对象是 bind 操作的标识符。
bindService / unbindService 都需要与同一个 ServiceConnection 对象配对。 同一个 ServiceConnection 对象只会触发一次绑定。只有在 unbindService 后才能重新绑定。
Service 本身不能知道有多少个 client,可以在每次触发 ServiceConnection 的时候增加一次静态计数。
如果不是在“轮回”的开始,Service 无法知道有新的 client 绑定,只能 client 主动通知给 Service。