Binder核心框架层(C/C++)

相关文件

frameworks/base/include/utils/*
frameworks/base/libs/utils/*
frameworks/base/include/binder/*
frameworks/base/libs/binder/*

主要类定义

基本概念

引用计数

    从驱动层协议和Binder的模型,我们知道Binder在客户端、驱动、服务端之间传递,必须有一种机制标识
Binder被哪些对象使用,什么时候销毁,就像Java对象,要维护一个对象的引用计数,在某种情况下自动销毁
该对象。Android如何实现引用计数,首先要了解Binder的基类,以及它的工作原理。

什么是Binder

    这个问题不是真正意义上的Binder定义,而是指在代码实现中怎样定义Binder。Binder的本质是代理模式,
因此需要提供一个基本的代理端和服务端实现。Android首先定义了IBinder这个接口,它包含了基本的通信方法,
例如传输数据、判断Binder连接等等。从这个接口派生出两个子类:BpBinder和BBinder。这两个类分别完成代理
端和服务端需要实现的基本功能。

传输介质Parcel

    Binder在传输过程使用的可序列化对象称之为Parcel。它能够将一个类的对象实例保存在内存中,并在跨进程
后能够还原成该类的对象实例,如同在同一个进程中一样。我们要讨论的重点是它能够充当Binder传输介质的角色,
必须具备哪些特性?

权限管理

    权限管理也是作为Service加入到Android系统中,它同样通过Binder来实现。由于大多数情况下系统服务需要对
客户端进行权限验证,因此我将它划分到核心框架层中。

要点总结