Android Framework学习笔记 -- Binder原理

本文探讨了Android Framework中的Binder机制,特别是在SurfaceFlinger服务中的应用。Binder是Android系统实现跨进程通信的关键,分为业务层和传输层。ISurfaceComposerClient、BpSurfaceComposerClient、BnSurfaceComposerClient、BpBinder、BBinder以及IPCThreadState等组件在通信过程中扮演不同角色。通信流程涉及客户端和服务端的交互,通过/dev/binder设备文件和ioctl进行驱动通信。
摘要由CSDN通过智能技术生成

看到老罗android之旅分析android源码简直逆天,跟代码都跟到驱动层去了,看了半天连个大概都看不懂,还有《深入理解Android》,跟一段代码跟着跟着都不知道自己在看啥。发现还是要对系统框架有个大概的了解,再去看这些东西比较好。

SurfaceFlinger作为android绘制服务,涉及东西还是挺多的。

  • 跨进程通信Binder机制
  • 上层的View系统
  • 下层的Display系统

首先是Binder,Binder主要用于Android中的跨进程通信,类似与socket一样的东西,由于Android将Bindder分为了业务层与传输层,导致了一堆Bindder对象的出现,再加上有一个比较特殊的服务ServiceManager一部分使用了Bindder,一部分又没有有使用Bindder,还有什么Server跟Service,导致看的整个人都不好。

先放一张IBinder的图

binder族谱图

BpBinderBBinder是一对,用于传输层的通信
BpSerivceBnSerivce是一对,用于业务层的通信
ISerivce是客户端使用的Serivce接口
Serivce是具体的实现

最终的通信发生在IPCThreadState,具体实现使用/dev/binder这个设备文件及使用ioctl来与驱动通信。


举个荔枝

SurfaceFlinger与Ap通信是通过Binder来通信的,而且还不仅仅是一种,反正先关注ISurfaceComposerClient

ISurfaceClient图

除了个别名称不一致,其他都与之前分析的IBinder架构是一致的

大概的通信流程

大概的通信流程

分别来看一下其中每个类

ISurfaceComposerClient

ISurfaceComposerClient在ISurfaceComposerClient.h中定义
具体内容就是几个接口的声明

class ISurfaceComposerClient : public IInterface
{
public:
    DECLARE_META_INTERFACE(SurfaceComposerClient);
    ...
    virtual status_t createSurface(
        const String8& name, uint32_t w, uint32_t h,
        PixelFormat format, uint32_t flags,
        sp<IBinder>* handle,
        sp<IGraphicBufferProducer>* gbp) = 0;
    virtual status_t destroySurface(const sp<IBinder>& handle) = 0;
    virtual status_t clearLayerFrameStats(const sp<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值