Binder 总结

1 android 进程间通信的主要机制: binder

2 binder 实现一次memcpy:

3 binder 的memory 封装出来了统一类:Parcel

4 IINTERFACE是接口封装,定义Proxy端和server端的接口形式

5 BpInterFace 其实是BpBinder的代理类,内部的mRemote指的就是BpBinder

6 asInterFace的接口在android 内部已经定义了一个宏,内部实现是new BpInterFace(BpBinder)

7 BpBinder 在调用IPCThreadState 调用到binder driver

8 IPCThreadState是一个thread 单例,

使用pthread_getspecific/ pthread_setspecific 方式实现线程单例

9 IPCThreadState是ioctol的形式与binder driver 通信,

将parcel的data 存放到driver的数据协议中

binder driver 可以创建server的thread,去处理binder消息

10 BpInterFace端封装出来的接口是APIName -> mRemote.transact -> BpBinder.transact -> IPCThreadState.transact -> writeTransactionData> waitForResponse > talkWithDriver >

11 ProcessState 是进程的单例,将构造函数变成了private,开发了self API。

构造函数时打开binder driver fd。

12 ProcessState mmap memory,server端执行该动作,将自己的memory与driver memory 共享,这样client端调用时,只需要将memory 从client process的 userspace,copy到kernerl 层的binder driver。这样kernel driver的memroy已经与server process 共享了,所以server也就能访问了

copy_from_user/ copy_to_user

13 ProcessState负责创建thread--IPCThreadState, driver 可以通过ioctl command 创建thread--IPCThreadState

ProcessState.spawnPooledThread > IPCThreadState.joinThreadPool 有参数isMain:

False--BC_REGISTER_LOOPER: 由binder request创建,创建thread后再将该binder注册到driver中
True---BC_ENTER_LOOPER:由用户层触发,告诉binder driver该thread就绪可以接受信息
 

14 IPCThreadState与Binder driver通信是通过handle, BpBinder内部存储该Handle, handle的意义是binder driver中内部维护的一个int 值,存储的是binder server端在该进程中的引用值。

15 binder driver 内部维护了process 对应的结构体, 包括thread 信息,binder server信息,binder client 引用等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值