android中的binder机制(不是说代码,说说实现的原理,你不得错过)
2014-10-15 12:34
1096 查看
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有个大体的理解:
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有个大体的理解:
相关文章推荐
- [Android] 理论了解Binder机制原理和底层实现
- [Android] 彻底了解Binder机制原理和底层实现
- Android binder 原理及实现机制<一>
- [Android] 彻底了解Binder机制原理和底层实现
- Android中悬浮窗口的实现原理和示例代码
- Android反射机制实现与原理
- Android Binder机制の设计与实现5(Binder 的表述)
- android开发之蜂鸣提示音和震动提示的实现原理与参考代码
- Android研究-Android深入浅出之Binder机制-跟着代码流程学binder[zz]
- Android Binder实现原理
- Android中悬浮窗口的实现原理和示例代码
- Android中悬浮窗口的实现原理和示例代码
- android Setting中隐藏项实现原理与代码
- Android Binder机制----实现自定义的系统服务
- Android Binder驱动 原理和实现
- Android Binder机制の设计与实现1-3(引言/面向对象的 Binder IPC/Binder 通信模型)
- Android Binder机制の代码角度分析
- Android中悬浮窗口的实现原理和示例代码
- 在android中利用多线程实现对控件的更新(动态修改文本框中的值)。简述原理并上传代码。