专栏首页嵌入式Linux系统开发Android 系统 binder 详解

Android 系统 binder 详解

最近博主在研究Android系统的binder。

binder是什么?可以理解为Andorid系统中的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解binder对于理解Android系统具有至关重要的作用。binder原理图如下:

Binder通信采用c/s架构,和Socket一样,但是稍微复杂。binder组件包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务。

具体通信过程:Server先向ServiceManager注册一个服务,其实也就是一个字符串。然后Client从ServiceManager获取服务,关键字就是注册的字符串。这样Client和Server就可以通信。真正的数据流是走了底层的Linux内核空间的binder驱动,但这个是被封装的,所以不用关心真正的binder驱动,只管在Client和Server之间调用函数收发数据就行。就是服务端的onTransact函数和客户端remote()->transact(TEST, data, &reply),发送的数据存在data中,返回的数据存在reply中。Client和Server都可以收发数据。

安卓系统架构图:

理解了binder以后,具体分析:binder驱动肯定是在最下面的Linux内核中,那么binder的客户端和服务器,可以存在在任何地方。举例:

1、bindder服务器在app层,客户端在app层。2、bindder服务器在native层,客户端在app层。3、bindder服务器在app层,客户端在native层。4、bindder服务器在native层,客户端在native层。

以上四种情况都可以。

说的比较抽象,我发两篇文章连接,这两篇文章的代码我已经验证过,可以使用。需要注意的是,APP层的binder由java语言编写,native层的binder,由C++语言编写。但其实接口都很相似。

https://blog.csdn.net/tkwxty/article/details/42712083

https://blog.csdn.net/tkwxty/article/details/102680970

但是要看懂代码,需要先理解几个类:

native层binder真实的继承关系如下:

对称一点可能方便理解:

我们主要是从BnInterface和BpInterface继承,去实现自己的服务器和客户端。

bp:binder proxy

bn:binder native

sm:ServiceManager

今天先讲这么多,如果这两篇文章有不懂的地方可以私聊博主。

·················· END ··················

本文分享自微信公众号 - 嵌入式Linux系统开发(Jason_Linux_),作者:Jasonangel

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解Binder

    之前一直对 Binder 理解不够透彻,仅仅知道一些皮毛,所以最近抽空深入理解一下,并在这里做个小结。

    俞其荣
  • Android跨进程通信:图文详解 Binder机制 原理

    Binder 跨进程通信机制 模型 基于 Client - Server 模式

    Carson.Ho
  • android进程间通信之Binder学习笔记(一)

    Binder 是一种进程间通信机制,基于开源的 OpenBinder 实现;OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手。

    李小白是一只喵
  • Android Binder跨进程通信

    为了保证 安全性 & 独立性,一个进程 不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的

    Anymarvel
  • Android应用程序与SurfaceFlinger服务的连接过程分析

    Android系统的开机动画是由应用程序bootanimation来实现的,它位于/system/bin目录下,它的具体实现可以参考Android系统的开机画面...

    233333
  • android开发书籍推荐大全

    android开发书籍推荐大全 ? 写在前面 首先,不提供电子版本的下载,请大家自行百度,如果还是找不到,可以加微信联系我。 再次很感谢写...

    用户1263308
  • Android Binder面试详解

    目前linux支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Serve...

    用户2802329
  • android binder机制详解

    摘要 Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原...

    xiangzhihong
  • Android系统架构开篇

    本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运...

    刘盼
  • 写给 Android 应用工程师的 Binder 原理剖析

    这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字...

    张磊BARON
  • Android跨进程通信IPC之6——Binder框架

    为了让大家更好的理解Binder机制,我们先来看下Android的整体架构。因为这样大家就知道在Android架构中Binder出于什么地位。 用一下官网上的...

    隔壁老李头
  • 图解 | Binder浅析(二)

    本文主要分析ServiceManager系统服务管理进程对binder的管理流程。

    Holiday
  • IPC—进程间通信的基础概念

    1、Android中多进程是指一个应用中存在多个进程的情况,因此这里不讨论两个应用之间的情况,首先在Android中使用多进程只有一种方法,那就是给四大组件指定...

    胡飞洋
  • Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

    codingblock
  • Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

    codingblock
  • Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

    codingblock
  • Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android...

    codingblock
  • Android 进阶13:几种进程通信方式的对比总结

    不花时间打基础,你将会花更多时间解决那些不必要的问题。 RPC 是什么 RPC 即 Remote Procedure Call (远程过程调用) 是一种计算机通...

    张拭心 shixinzhang
  • Android开发之漫漫长途 Ⅷ——Android Binder(也许是最容易理解的)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

    LoveWFan

扫码关注云+社区

领取腾讯云代金券