上一次说了android的启动原理,这次说下android的进程间的通信。
linux 本身是提供了通信机制的。大概有7种左右。然后但是为什么android不用。反而要自己搞一套。主要分析到2个方面: 安全性 和性能。因为前期的移动手机性能不高。还有就是绕开Linux内核的开源限制。
总结就是----避免内核空间到数据接受端的直接的数据拷贝;数据接受端接收数据的时候,由于数据大小不确定,要么分配一个很大的空间装数据,要么动态扩容;两种方式都有问题;Binder使用mmap直接把接受端的内存映射到内存空间,避免了数据的直接拷贝;另外通过data_buffer等方式让数据仅包含定长的消息头,解决了接受端内存分配的问题.
android内部的进程间的通信都是通过binlder 来实现的。这个是很重要的一点。
我们面试问道的 aild Content Provider 调用拨打电话 Intent跳转 其底层都是调用的bindler机制.
关于binlder的运行原理 我只写一个大概。
在其底层的Linux中 /etc/bindler/ 有这个c 文件 就是binlder 的程序文件了。其内部是采用的引用计数器来为何对象。要知道 我们的bindler是支持多进程。如何一个service端要对应多个客户端 也就是说要实现多对多。在看内部源码的时候我发现其内部是用2个红黑树来维持 一个service 对专门提供一个客户端调用。如果还有其他的客户端调用就在生成一个servicebindler 对象来提供调用 然后根据内存管理的引用计数器来回收掉不需要的servicebindler对象。
如果你想深究 我推荐这个http://0xcc0xcd.com/p/index.php
Android 内核分析 bindler
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
- Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
- Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
- 【R 原文片段】 如果你不在谈话技巧上花心思,很容易表现的咄咄逼人,使谈话陷入僵局,因此需要改变你的谈话方式。我的...