前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[001]自己来实现Binder机制

[001]自己来实现Binder机制

作者头像
王小二
发布2020-06-08 10:43:10
8350
发布2020-06-08 10:43:10
举报
文章被收录于专栏:王小二的Android站

前言

还记得我刚工作半年时候,因为公司的架构调整,我从应用组换到了Framework组,当时我的领导让我看一下Binder,当时也是一脸闷逼,各种百度,各种买书来看,但是总是迷迷糊糊,由于对JNI和C语言的欠缺,一直没有真正的搞明白,工作两年之后才算整理上理解,接下来给各位讲讲我的理解。

Android系统为什么需要Binder机制

因为各个进程都在自己的虚拟地址空间,进程A无法直接调用进程B的方法。为了能让进程A调用进程B的方法,有什么办法,我们自己也可以想想。我自己想了一个简单粗暴的方法,进程B在SD卡中创建一个文件"sdcard/B",然后每隔一秒,去读这个文件,进程A写一个方法名和参数到SD卡中的文件"sdcard/B",进程A每隔1秒去读这个文件"sdcard/B",进程B发现文件"sdcard/B"内容有更新,读到了方法名和参数,然后根据方法名调进程B的方法,再将返回的结果写到这个文件"sdcard/B"中。进程A发现文件"sdcard/B"内容有更新就读取返回结果,这样子就完成了一次跨进程通信。虽然我这个方案,从易用性和性能来说都有一点差,但是Binder机制本质上就是类似这样子的方式。

Binder机制中的四大重要组成部分

1.Binder驱动 2.ServiceManager(本质上就是Server端,世界上第一个Server端) 3.Server端 4.Client端

1.Binder驱动

这里有很多概念,牵涉到源码很多,我不想和各位聊聊源码,在上一个小编自己实现的跨进行通信方案,能否有一定的改进,创建SD卡的文件,读写SD卡的文件,监听SD卡的文件,SD卡的文件格式,这些东西能否形成一个套通用的接口方便各个进程来使用呢,其实Binder驱动就是这个通用的接口。

2.ServiceManager

大家发现一个问题没有,进程A要调用进程B,首先要找到进程B在SD中创建的文件,那进程A如何找到这个文件呢?这个Binder机制,早就帮你考虑好了,开机会启动一个进程,叫做ServiceManager(SM),SM会创建第一个SD文件(这个文件的地址是sdcard/0,固定),并对这个文件进行监听

3.Server端

进程B就是Server端,在进程B在创建文件"sdcard/B"后,把注册进程B信息和文件名,写到SM的文件中,SM把进程B的信息和文件名存在SM进程中内部的一个红黑树,方便查询。

4.Client端

进程A就是Client端,当进程A要调用进程B的方法时候,首先进程A去把自己的查询B的请求写到SM的文件中,SM根据进程A的请求,返回进程B的信息和文件名,然后A根据进程B的信息和文件名去把方法名和参数写到进程B的"sdcard/B"文件中,然后进行一个跨进程通信。

小结

小编自己实现一个类Binder的机制,并提出了四个重要概念,接下来小编会继续来分析这四个重要概念,敬请期待。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Android系统为什么需要Binder机制
  • Binder机制中的四大重要组成部分
  • 1.Binder驱动
  • 2.ServiceManager
  • 3.Server端
  • 4.Client端
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档