Update 四大组件的启动流程口水话.md

master
Omooo 4 years ago
parent fe2d78623e
commit a880ea9d13
  1. 5
      blogs/Android/口水话/四大组件的启动流程口水话.md

@ -41,3 +41,8 @@ Launcher 组件是如何获取这些信息的呢?其实是在系统启动时
至此,非绑定 Service 组件的启动流程就讲完了。下面再来说说绑定服务的启动流程。 至此,非绑定 Service 组件的启动流程就讲完了。下面再来说说绑定服务的启动流程。
bindService 的流程要比 startService 流程复杂很多,不过核心就是把 ServiceConnection 对象传递给 Activity 组件,在应用程序进程会执行 handleCreateService 和 handleBindService,前者就是 startService 的流程,后者即是多出来的 bind 流程。
在 ContextImpl 的 bindService 中,会首先把 ServiceConnection 通过 getServiceDispatcher 调用转化成一个 IServiceConnection 接口,这个 IServiceConnection 是一个 Binder 对象,所以就可以跨进程传递给 Activity 了。然后就是获取 AMS 的代理对象,去执行 bindService 调用。这个方法会传入 AppplicationThread、ActivityToken 以及 Intent。在 AMS 成功将 Service 组件启动起来之后,就会把这个 Binder 对象封装成一个消息,发送给 Activity 组件所运行的应用程序的主线程消息队列中,最后在分发给 Activity 组件内部的成员变量 ServiceConnection 的 onServiceConnected 来处理。Activity 组件获得了 Service 组件的访问接口之后,就可以调用其相关服务了。
至此,绑定服务的流程就讲完了,虽然省略了很多,但是大致流程还是很清楚地嘛~
Loading…
Cancel
Save