Android应用程序构成

embedded/2024/9/25 21:26:47/

binder

Android应用程序是由ActivityServiceBroadcast ReceiverContent Provider四种类型的组件构成的, 它们有可能运行在同一个进程中, 也有可能运行在不同的进程中。 此外, 各种系统组件也运行在独立的进程中, 例如, Activity管理服务ActivityManagerService和Package管理服务PackageManagerService都运行在系统进程System中。

image-20200725142202987

Android系统是基于Linux内核开发的。 Linux内核提供了丰富的进程间通信机制, 如管道(Pipe) 、 信号(Signal) 、 消息队列(Message) 、 共享内存(Share Memory) 和 插口(Socket) 等。

image-20200725142429073

而 Android系统开发了一套新的进程间通信机制——Binder。

Binder进程间通信机制在进程间传输数据时, 只需要执行一次复制操作, 所以,提高了效率,节省了内存空间。Binder进程间通信机制是在OpenBinder的基础上实现的, 它采用CS通信方式, 其中, 提供服务的进程称为Server进程, 而访问服务的进程称为Client进程。

同一个Server进程可以同时运行多个组件来向Client进程提供服务, 这些组件称为Service组件。同一个Client进程也可以同时向多个Service组件请求服务, 每一个请求都对应有一个Client组件( Service代理对象) 。

Binder进程间通信机制的每一个Server进程和Client进程都维护一个Binder线程池来处理进程间的通信请求, 因此, Server进程和Client进程可以并发地提供和访问服务。 Server进程和Client进程的通信要依靠运行在内核空间Binder驱动程序来进行。

Binder驱动程序向用户空间暴露了一个设备文件/dev/binder, 使得应用程序进程可以间接地通过它来建立通信通道。

Service组件在启动时, 会将自己注册到一个Service Manager组件中, 以便Client组件可以通过Service Manager组件找到它。

因此, 我们将Service Manager组件称为Binder进程间通信机制的上下文管理者, 同时由于它也需要与普通的Server进程和Client进程通信, 我们也将它看作是一个Service组件, 只不过它是一个特殊的Service组件。

Binder进程间通信机制 :

Binder进程间通信机制

ClientServiceService Manager 运行在用户空间, 而Binder驱动程序运行在内核空间, 其中, Service ManagerBinder驱动程序由系统负责提供, 而 ClientService 组件由应用程序来实现。 ClientServiceService Manager均是通过系统调用 openmmapioctl 来访问设备文件 /dev/binder, 从而实现与 Binder 驱动程序的交互, 而交互的目的就是为了能够间接地执行进程间通信。

分析 Binder 进程间通信机制的四个使用情景, 分别是:

(1) Service Manager的启动过程。

(2) Service Manager代理对象的获取过程。

(3) Service组件的启动过程。

(4) Service代理对象的获取过程。

上述四个使用情景都是基于Binder进程间通信机制的C/C++实现来分析

Binder驱动程序

Binder进程间通信库


http://www.ppmy.cn/embedded/29942.html

相关文章

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升,铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点,广泛应用于建筑、汽车、电子等领域。然而,铝型材的形状多样、尺寸不一,以及生产线上的高…

【Jenkins】持续集成与交付 (九):Maven安装和配置、以及构建项目

🟣【Jenkins】持续集成与交付 (九):Maven安装和配置、以及构建项目 一、Maven简介二、持续集成环境安装Maven2.1 Maven软件包上传2.2 配置环境变量2.3 Jenkins配置关联JDK和Maven2.4 添加Jenkins全局变量2.5 修改Maven的settings.xml2.6 全局工具配置--设置自己的setting.…

清理 Conda 和 pip 缓存

清理 Conda 缓存 查看 Conda 缓存的使用情况 conda clean --dry-run --all 删除不再使用的包和缓存 conda clean --all 清理 pip 缓存 Python缓存文件的默认位置: Windows 10:C:\Users\username\AppData\Local\pip\Cache macOS:/Users/…

InfluxDB安装使用介绍

1.介绍 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 2.对常见关系型数据库(MySQL)的基础概念对比 1…

卫星通信现状与展望一 -- 华为Mate60手机+电信中通卫星

作者:私语茶馆 某天和一位朋友闲聊的时候,说起了卫星通信这个话题,讨论了卫星应用于个人通信的现状和展望,于是搜集了已有材料,整理如下: 中国天通卫星通信系统 1. 基本情况: 2023年9月消息,华为Mate 60 Pro上市,持有者即使在没有地面信号的情况下,也可以拨打、接听…

全景剖析阿里云容器网络数据链路(七):Terway DataPath V2(Terway≥1.8.0)

作者:余凯 前言 近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演…

CSS特性

化简代码,定位问题,解决问题。 1继承性 如果标签有自己的样式,则不继承。 2层叠性 后面生效。 不同属性都生效果。 3优先级 复合选择器里 EMMET的写法 背景属性 背景图默认是平铺(复制)的效果。 背景图平铺方式 …

十大排序算法之——希尔排序算法(Java实现)及思路讲解

希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录组成)分别进行直接插入排序&#xff0…