Binder学习笔记-服务的绑定源码浅析

首先bindServive调用到了Context的bindService方法,然后到Context的实现类ContextImp类中的bindService方法


然后到ContextImp的binServiceCommom


然后这里会通过AIDL逻辑方式,最终到了ActivityManagerServce的bindService


这里的bindServiceLocked会调用到ActiviService的bindServiceLocked,分2步分析,需要调用的服务进程创建否,服务启动否


从这里开始
app启动了,进入到图中方法


这里app.thread就是ActivityThread,进到这个方法


通过handler发送消息,继续跟进


继续


到这里就通过类加载器,反射创建了service


服务创建了之后,再回到ActiviService的bindServiceLocked方法中,看上图方法,进去


然后绑定服务,再回到ActivityThread的流程


流程与创建服务差不多,通过handler发消息来操作的,上图中s.onBind()方法拿到IBinder对象,这里就是拿到的服务端创建的Ibinder,有了这个IBinder对象,客户端就可以调用服务端的方法啦。第二句代码就又到了AMS的publishService,跟进


这个mServices我们知道,调用到了ActiviService类中的publishServiceLocked,然后把绑定了之后的Ibinder对象传入


这里的c.conn.connect方法,最终就调用到了客户端的onServiceConnected,传入IBinder对象


到这里,客户端就拿到了服务端创建的IBinder对象了,分析完毕

小小总结一下,通过AMS启动,绑定服务,方式使用handler来发送消息执行。

你可能感兴趣的:(Binder学习笔记-服务的绑定源码浅析)