美文网首页
Binder学习笔记-服务的绑定源码浅析

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

作者: tangYaXin | 来源:发表于2020-07-18 23:07 被阅读0次

首先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学习笔记-服务的绑定源码浅析

      本文链接:https://www.haomeiwen.com/subject/cmoctktx.html