美文网首页Android 知识
第一章:我来实现一个Binder

第一章:我来实现一个Binder

作者: 王小二的技术栈 | 来源:发表于2018-11-14 10:42 被阅读186次

还记得我刚工作半年时候,因为公司的架构调整,我从应用组换到了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的机制,并提出了四个重要概念,接下来小编会继续来分析这四个重要概念,敬请期待。

相关文章

  • Android Binder机制

    Binder简介 binder使用内存映射(mmap)来实现进程间传递数据,比较传统的进程间通信. binder只...

  • IPC 基础四 Binder

    Binder是Android中的一个类,它实现了IBinder接口。从IPC角度来所,Binder是Android...

  • 第一章:我来实现一个Binder

    还记得我刚工作半年时候,因为公司的架构调整,我从应用组换到了Framework组,当时我的领导让我看一下Binde...

  • IPC机制——AIDL的简单梳理

    在了解AIDL之前,我们要对Binder有简单了解。 Binder Binder是android的一个类,实现了 ...

  • Binder通信和AIDL

    本文讲的是,Binder通信和AIDL,一般的理解是,Binder通信可以通过AIDL来实现,通过AIDL定...

  • AMS系列②—Binder通信的双向代理绑定

    Binder进程见通信是通过远程代理来实现的,SystemServer进程和APP用户进程使用Binder进行通信...

  • Android Binder机制入门

    Binder机制是什么? 仅从应用层上来讲: Binder是一个类,实现了IBinder接口 Binder是and...

  • Binder

    Binder是基于OpenBinder来实现的,由client、server、Service Manager(服务...

  • IPC之Binder

    参考Android开发艺术探索 Binder Binder 是Android中的一个类,实现了 IBinder 接...

  • Android IPC机制(1)——Binder

    Binder Binder是什么? Binner是一种进程间通讯机制为什么是Binder? Binder简单实现 ...

网友评论

  • 业松:连我都看懂了✌(̿▀̿ ̿Ĺ̯̿̿▀̿ ̿)✌后面会手写一个服务做示例么?
    王小二的技术栈:@业松 手写一个binder服务是肯定,手写binder框架有点难
    王小二的技术栈:@业松 手写难度太大,但是会带着这种思想去看待binder源码

本文标题:第一章:我来实现一个Binder

本文链接:https://www.haomeiwen.com/subject/tcjdfqtx.html