当前位置: 首页 > news >正文

Binder、 AIDL 、IPC 大展神威

一、Binder

1.Binder在Android系统中用于跨进程通信(IPC,Inter Process Communication)。

2.Binder提供了进程间通信的安全性机制,包括权限验证和数据传输的序列化/反序列化过程。使用了权限检查和UID/PID检查等安全机制来确保通信安全。

3.Binder基于C/S架构,涉及3种角色:客户端、服务端、服务管理器。

4.客户端进程通过Linux内核中的一个Binder驱动(/dev/binder)与服务器进程进行通信,服务管理器负责维护服务的注册、查找和管理。

5.Binder使用共享内存来在进程间传输数据,更加高效。

6.所有Binder对象都必须实现IBinder接口。此接口定义了基本的跨进程通信方法,如transact()和queryLocalService()等。

7.SystemServer进程和四大组件(Activity、Service、Broadcast Receiver、Content Provider)都依赖于Binder提供服务。

8.Binder支持多种编程语言,如Java、C++等。

二、 AIDL

1.AIDL 是 Android Interface Definition Language的英文缩写,意思是Android接口定义语言,是Android平台上用于定义客户端和服务端之间交互的语言。

2.使用 AIDL 可以帮助我们发布以及调用远程服务,实现跨进程通信。AIDL通过Android底层的Binder机制来实现跨进程通信。

3.编译器使用AIDL文件生成一段代码,通过预先定义的接口达到两个进程内部跨进程访问对象的目的。需要完成2件事情:
1) 定义AIDL的相关类。
2) 调用 AIDL 产生的 class文件。

4.将服务的 AIDL 放到对应的 src 目录,IDE在build 目录下会生成相应的接口类。

5.所有传递给AIDL方法的参数和返回值都必须能够被序列化。

6.参数可以传递基本数据类型、 String、CharSequence、List、Map、Parcelable及AIDL接口本身。

7.服务端的AIDL方法调用是在Binder线程池中执行的,不是在主线程中执行的。

8.由于AIDL接口是公开的,因此服务提供的接口方法应该进行适当的安全检查。

9.在AIDL中,in、out、inout标识符用来表示数据的流向:in表示数据只能由客户端流向服务端,out表示数据只能由服务端流向客户端,而inout表示数据可在服务端与客户端之间双向流通。

三、IPC(进程间通信)

1.Android的 IPC 通信方式包括:Binder、ContentProvider、套接字Socket、文件共享、Messenger(基于消息传递的IPC方式,使用Handler来发送接收信息)、AIDL(底层基于Binder实现)等。

2.操作系统的IPC通信方式包括:共享内存、套接字Socket(不仅可用于网络通信,也可以用于同一台机器上不同进程间的通信)、管道(单向的,分为匿名管道和命名管道)、消息队列、信号量、远程过程调用RPC(Remote Procedure Call)等。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux进程控制——进程等待——wait、waitpid
  • uniapp自定义网格布局用于选择金额、输入框焦点事件以及点击逻辑实战
  • 【面试题】C++:面向对象的三大特性?
  • Cocos Creator文档学习记录
  • Java二十三种设计模式-外观模式(9/23)
  • 示例:在ML.NET中应用Model Builder模型生成器构建图片分类模型
  • 定位Oracle表空间问题
  • 基于若依框架开发的Spring Boot+Vue的MES(生产制造执行系统)是一种专为中小型工厂设计的ERP(企业资源计划)系统
  • Nerd Fonts
  • 如果你感到焦虑、精神内耗,那就跑步去吧!
  • Spring Cloud全解析:注册中心之Eureka服务发现
  • 前端 HTML 概述
  • MATLAB在科研领域的重要性
  • E25.【C语言】练习:修改二进制序列的指定位
  • LeetCode Medium|【3. 无重复字符的最长子串】
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 4个实用的微服务测试策略
  • iOS | NSProxy
  • JavaScript设计模式之工厂模式
  • JavaWeb(学习笔记二)
  • Java超时控制的实现
  • PHP那些事儿
  • windows-nginx-https-本地配置
  • 服务器之间,相同帐号,实现免密钥登录
  • 跨域
  • 利用DataURL技术在网页上显示图片
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 物联网链路协议
  • 译米田引理
  • 硬币翻转问题,区间操作
  • 再谈express与koa的对比
  • ionic入门之数据绑定显示-1
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • mysql面试题分组并合并列
  • 进程与线程(三)——进程/线程间通信
  • ​Java并发新构件之Exchanger
  • ​如何防止网络攻击?
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #知识分享#笔记#学习方法
  • (33)STM32——485实验笔记
  • (C语言)逆序输出字符串
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二十三)Flask之高频面试点
  • (论文阅读11/100)Fast R-CNN
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转) ns2/nam与nam实现相关的文件
  • (转)Linux下编译安装log4cxx
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作