上一次说了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 原文片段】 如果你不在谈话技巧上花心思,很容易表现的咄咄逼人,使谈话陷入僵局,因此需要改变你的谈话方式。我的...