立即注册
查看: 3289|回复: 5

[原创] Android Binder架构剖析

已绑定手机
发表于 2020-8-4 17:39:37 | 显示全部楼层 |阅读模式 来自 广东省深圳市
1.Binder是什么?
2. Binder采用怎样的架构设计
3. Linux有现成的PC机制,为什么 Android要采用 Binder作为进程间通信方式?
4. Binder是如何实现的一次通信只拷贝一次内存?
5. binder有这么多优势, native daemon为何采用 socket? zygote为何采用 socket?
6. binder通信过程, transaction too large,该如何破?
7. Binder传输过程,什么时机会释放内存?
8. Binder服务是如何注册到系统的?又是如何查看某个服务的?
9. Binder调用是否为阻塞操作? oneway是否会阻塞?同步与异步 Binder是如何实现的?
10. lin kTodeath的原理是什么? BInder能做这个操作吗?一个 BpBinder可以注册多个死亡回调?
11. linkToDeath/ unlinkToDeath的原理是什么,这个过程是否涉及进程间通信?
12. binderDied是如何触发的?有没有可能进程被杀而不会触发呢?
13.代理端发起 binder请求,并交由服务端正在处理,如果此时代理端进程死亡,服务端的活是否会停止?
14. Native层与java层 binder有什么关系?如果Java层和 Native层分别注册同名的 binder,查询服务该显示哪一个?
15. Binder线程池是如何管理与运作的?什么情况下会 binder线程池占满?一个进程到底可以有多少个 binder线程?
16.调用同一个进程的 binder接口,是否需要走一遍完整的 binder driver流程?
17. binder的使用场景有哪些?使用 binder过程有哪些需要注意的地方?
18.App进程是如何做到天生支持 Binde通信?
19.很多情况下,为什么ANR触发时,app主线程都卡在 binder调用,这是系统的锅,还是app的锅?
20. Binder有没有什么缺点或不足? Binder机制有哪些改进空间?

BINDER安全性
传统PC的接收方无法获得对方进程可靠的UD/PID,从而无法鉴别对方身份
Android在应用程序安装过程便已分配指定的UID,进程的U|D是鉴别进程身份的重要标忐;使用传统IPC只能由用户在数据包里填入UID/P|D;
Bindel通信的身份信息PD/UD,是由Linuⅸ内核在进程通信过程填充,安全可靠。

设计角度
面向对象的设计体验
系统平台级的全方位支持,使用简单
Binder模糊了进程边界,淡化了进程间通信过程,整个系统仿佛运行于同面向对象的程序之中

BC协议

BC协议

BC协议

协议转换

协议转换

协议转换




文件下载,请回复
游客,如果您要查看本帖隐藏内容请回复


发表于 2020-8-24 09:06:16 | 显示全部楼层 来自 上海市
雄关漫道真如铁
发表于 2020-9-6 20:22:24 | 显示全部楼层 来自 湖北省武汉市
看一下是什么东西
已绑定手机
发表于 2020-9-12 07:31:02 | 显示全部楼层 来自 湖南省长沙市
参考一下,学习学习
已绑定手机
发表于 2020-11-12 14:51:42 | 显示全部楼层 来自 四川省成都市
thanks for share
发表于 2022-3-30 15:36:03 | 显示全部楼层 来自 广东省佛山市顺德区
参考一下,学习学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表