目录
-
Binder
Android系统中,每个应用程序是由Android的
Activity
,Service
,Broadcast
,ContentProvider
这四大组件的中一个或多个组合而成,这四大组件所涉及的多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案,当然也存在部分其他的IPC方式,比如Zygote通信便是采用socket。 -
一次完整的通信过程
-
IPC&&RPC
-
IPC(进程间通讯),RPC(远程过程调用)
-
从组件的角度,通信涉及三部分:
-
源程序:假设是A进程
-
目的进程:假设为B进程,假设提供led服务
-
数据:char buf[512],数据就是一个buff,双方约定好数据格式;
-
-
进程A怎么知道进程B提供的led的服务?为什么不是其他进程?
-
进程B向service_manager注册led服务;
-
进程A向service_manager查询led服务,得到一个handle,这个handle指向某个的某个服务,是服务的引用;binder驱动会自动根据服务对应的handle值,确定这个服务所在进程;
-
-
RPC关注的一些问题:
-
RPC:称为远程过程调用,Client调用Server端函数时,要调用哪个函数?
-
对server的函数编号,要调用哪个函数,把函数编号(这个编号最后会被封装成txn->code)发给server;
-
-
调用的函数,给被调用的函数传什么参数?这些参数怎么传递过去的?
-
通过IPC的buffer传递给server
-
-
调用的返回值是什么?
-
server端通过buffer将返回值传递给client端的调用;
-
-
-
Binder原理简介
-
Binder通信采用C/S架构,从组件视角来说,包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务;
-
从流程的角度:Binder分为三大基础流程,分别是:
-
注册服务(addService)
-
获取服务(getService)
-
使用服务
-