android中的binder机制(不是说代码,说说实现的原理,你不得错过)

binder分为几个部分:client,service,servicemanager,driver,

binder机制概要:传送的数据都是通过存放在driver的内核缓冲区中的,这样client会向binder发送命令往这个共享区域写数据,service的binder线程也会从这里读数据,过程是阻塞的,这样线程安全。


第一点,在客户端调用,实际是在和driver交互,不是在和service交互。

第二点:我们是怎么获取我们想要的service:所有的service都在servicemanager中注册了,要找,向他要,那怎么要呢?第三点

第三点:这要牵扯到servicemanager的注册,servicemanager的注册可以理解为:在servicemanager启动的时候,就会自告奋勇的申请成为driver的上下文,至于上下文里面的内容就是"xxxxx.xxx.xxxservice"=service这样的引用,这些引用是怎么生成的呢?第四点

第四点:当service要启动的时候,会主动的先向driver得到servicemanager的引用,然后再向servicemanafger发送第三点当中提到的引用,而在service的启动过程中,会通过driver在driver的内核空间创建一个共享的数据缓冲区(binder概要中提到的缓冲区就是这个),其实我个人观点,你要是把第三点当中提到的注册在servicemanager中的引用理解为这个缓冲区的引用吗,也不错,就是那么回事

第五点:在service启动的过程中,还启动了许多的线程来处理binder驱动卸载缓冲区的数据,这就是binder线程



上面所说只是为了在对binder有个大体的理解:







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值