Android开发Android技术知识Android开发经验谈

上次没砍我的,这次我又来了;看完这篇还不明白 Binder 你砍

2022-09-21  本文已影响0人  程序老秃子

最近一段时间由于工作,接触到 Framework 部分比较多一点,也难免要和 Binder 打一些交道, 因为在 Android 系统中,每一个应用程序都是由一些 ActivityService 组成的,这些 ActivityService 有可能运行在同一个进程中,也有可能运行在不同的进程中;那么,不在同一个进程的 Activity 或者 Service 是如何通信的呢?这就是本文中要介绍的 IPC 机制中的 Binder 进程间通信机制

首先来了解下什么是 IPC 机制

Linux 中,是以进程单位分配和管理资源的;出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭;但是,一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项任务,因此要求进程之间必须能够互相通信,从而共享资源和信息;所以,操作系统内核必须提供进程间的通信机制(IPC)

IPC 机制种类

但在 Android 终端上的应用软件的通信几乎看不到这些 IPC 通信方式,取而代之的是 Binder 方式

什么是 Binder ?

Binder 是 Android 系统中最重要的特性之一;正如其名“粘合剂”,它是粘合系统间各个组件的桥梁,Android 系统的开放式设计也很大程度上得益于这种跨进程通信机制

所以理解 Binder 对于理解整个 Android 系统有着非常重要的作用,Android 系统的四大组件AMS,PMS系统服务无一不与 Binder 挂钩;如果对Binder 不甚了解,那么就很难了解这些系统机制,从而仅仅浮与表面,不懂 Binder 你都不好意思说自己会 Android 开发;想要深入 Android,Binder 必须迈出的一步

Binder 进程通讯

应用程序虽然是以独立的进程来运行的,但相互之间还是需要通信,比如,在多进程的环境下,应用程序后台服务通常会运行在不同的进程中,有着独立的地址空间,但是因为需要相互协作,彼此间又必须进行通信和数据共享,这就需要进程通信来完成

进程间通信的方式

Linux 系统中有:

Java 系统中也有:

所以 Android 可以选择的进程间通信的方式也很多,但是它主要包括以下几种方式:

为什么选择 Binder ?

在上面这些可供选择的方式中,Android 使用得最多也最被认可的还是 Binder 机制;为什么会选择Binder来作为进程之间的通信机制呢?

实则是因为 Binder 更加简洁和快速消耗的内存资源更小吗?不错,这些也正是 Binder优点;当然,也还有很多其他原因,比如传统的进程间通信可能会增加进程的开销,而且有进程过载安全漏洞等方面的风险,Binder 正好能解决和避免这些问题;Binder主要能提供以下一些功能:

再来看看 Binder 的线程管理

Binder 线程池的概念

Binder 实际上是位于不同进程中的线程之间的通信

Binder 线程与 Binder 主线程的区别

关于工作线程的启动,Binder 驱动还做了一点小小的优化

今天有关于 Framework IPC 机制中的 Binder 进程间通信机制的阐述就到这里了;为了帮助大家了解更多 Android Framework 框架层 必备的技术知识,这里特别提供一份由腾讯大佬所整理的一张 Framework 思维导图及其配套的一份学习手册;有需要这份思维导图及学习手册 的朋友: 可以简信发送 “架构图”“进阶” 即可 直达获取;希望大家看完之后能给大家一些帮助

内容展示如下:

Android Framework 思维导图

高清版 Android Framework 思维导图 获取方式:简信发送 “架构图” 即可 直达获取

应用程序与 AMS 的通讯实现

完整版 Android Framework 思维导图及学习手册 获取方式: 简信发送 “架构图” 或 "进阶" 即可 直达获取

应用进程与 WMS 的通讯实现

应用进程之间的通讯实现

完整版 Android Framework 思维导图及学习手册 获取方式: 简信发送 “架构图” 或 "进阶" 即可 直达获取

既然选择了程序员这个行业,那么你一定要做好充足的准备;要想在人前显贵,背后所付出的辛劳和汗水就是必须的

Android 架构师之路还能漫长,与君共勉

上一篇 下一篇

猜你喜欢

热点阅读