001——Binder 机制详解—Binder IPC 程序结构
来源:互联网 发布:inputselect.js 编辑:程序博客网 时间:2024/05/16 01:38
http://www.cloudchou.com/android/post-497.html
前言
通过Binder入门系列,我们已知道如何创建native binder service,framework binder service,应用层binder service,并知道如何编写framework层和应用层的客户端去调用native binder service。接下来几篇博客将为大家详细分析Binder机制,目前打算写如下几篇博客:
1) Binder IPC 程序结构
介绍binder service的服务端进程,客户端进程,ServiceManager进程三者之间的关系
2) Binder的系统架构
介绍Binder系统架构的层次划分,每个层次的作用,并详细介绍系统架构的适配层和核心库。
3) Binder的本地库框架
4) Binder的Java层框架
Binder IPC 程序结构
Binder IPC 程序结构如下图所示:
我们先从进程的角度来分析,Binder机制共涉及3个进程, 服务端进程,客户端进程,管理各种binder service的service manager进程。图中进程2是服务端进程,进程1是客户端进程,IServiceManager服务对象所在进程便是ServiceManager进程。
我们知道servicemanager进程是init进程解析init.rc启动的关键本地服务,但是多个binder service提供者可能在同一个进程里,并不是说每个binder service提供者都各自独占一个进程,象system_server进程就有多个binder service,比如activity manager service,package manager service,power manager service。
服务端进程启动后会获取IServiceManager的引用,然后调用它的addService方法在ServiceManager里注册binder service。客户端进程启动后也会获取IServiceManager的引用,然后调用它的getService方法获取binder service引用,再调用引用的方法。
我们再从程序框架角度分析,服务端进程的BnXXX和客户端进程的BpXXX同时实现了接口xxx,这里其实使用了代理模式,并且是远程代理。客户端进程通过IServiceManager获取的binder引用其实是一个IBinder指针,BpXXX会保存这个IBinder指针,BpXXX实现接口xxx的方法时都是通过IBinder指针提交一些信息到服务端进程,这些信息包括方法的参数信息,用于接收返回值的Parcel对象,代表某个方法的常量(不同的常量表示调用不同的方法)。IBinder指针提交信息其实是通过驱动层提交到服务端进程的。服务端进程实现BnXXX时,框架层最终会调用onTransact方法,根据不同的code调用不同的方法,并将结果返回给客户端。
参考资料
书《Android系统原理及开发要点详解》 第4章Android的底层库和程序
- 001——Binder 机制详解—Binder IPC 程序结构
- Android IPC机制——Binder详解
- Binder 机制详解—Binder 本地框架
- Binder 机制详解—Binder 系统架构
- Android的IPC机制——Binder
- Android中的IPC机制——Binder
- 002——Binder 机制详解—Binder 系统架构
- 004——Binder 机制详解—Binder 本地框架
- 005——Binder 机制详解—Binder Java框架
- IPC机制——AIDL——Binder“连接池”
- Android的IPC机制——Binder (1)
- Android多进程IPC机制——binder原理探索
- Android FrameWork——Binder机制详解
- Android——IPC机制(一)IPC概念以及Binder机制
- 安卓IPC机制之Binder详解
- Android Binder机制详解:手写IPC通信
- Binder IPC 机制
- IPC 机制Binder 剖析
- 线程基础(1)
- 机器学习特征工程总结
- c++重叠I/0
- IE 盒模型和W3C盒模型
- C++ STL : std::list
- 001——Binder 机制详解—Binder IPC 程序结构
- R语言决策树概论
- Coder_DJ 自定义tableViewCell的侧滑删除按钮
- C++中的可调用对象
- 极其简单的一个JSP小功能+空指针异常Bug解析(内容更新)
- TextView设置个别字体样式
- 线程基础(2)
- vc程序可以运行但没结果
- shape【Android】