Android---进程间通信机制2

news2024/7/6 20:19:29

Service Manager(SM):大管家。管理系统服务的 Ibinder。

1 如何启动 service_manager 服务

SM注册:

1 binder_open(): 打开驱动(设置大小128K),内存映射

2 binder_become_context_manager(): 设置 SM 为大管家 --- sm  作用:为了管理系统服务

        1 创建 binder_node 结构体对象

        2 proc --指向--> binder_node

        3 创建 work 和 todo 队列 ---》 类似 messageQueue

3 binder_loop(): BC_ENTER_LOOPER 命令

        1 写入状态 Loop

        2 去读数据:binder_thread_read: ret = wait_event_freezable_exclusive(proc->wait, binder_has_proc_work(proc,thread)); 进入等待。

 

binder_become_context_manager(): 设置 SM 为大管家;binder_loop(): 循环监听 

binder_ioctl 里的 binder_ioctl_set_ctx_mgr() :创建 binder_node 结构体对象,把 proc 指向 binder_node ,创建 work 和 todo 队列

Binder_loop: binder_write()   binder_reade()  binder_thread_write()  binder_thread_read()

2 如何获取 service_manager服务

SM 获取:

需要获取 SM 的情况:1、注册服务到SM;  2、通过 SM 去获取服务--java

  1 ProcessState::self() -> getContextObject(NULL)

        1 ProcessState::self()

          1. 打开驱动:binder

          2. 设置线程最大数目:15个

          3. mmap --设置共享内存大小(1M - 8K) 普通服务的大小

        2 getContextObject

          1. 创建一个 BpBinder --相当于客户端对象

  2 interface_cast

        1 new BpServiceManager(new BpBinder)

        2 remote.transact --> 远程调用(跨进程)

        3 remote == BpBinder

 3 java 层 ---serviceManager.addService

        1 new ServiceManagerProxy(new BinderProxy)

        2 mRemote == BinderProxy

        3 BinderProxy.mObject == BpBinder

        4 mRemote.transact = BpBinder.transact (调用transact 就跨进程)

3 详解 AIDL 生成 Java 类

AIDL 帮我们处理 Binder 中繁琐、复杂的操作。

1、AsInterface:区分是在当前进程,还是跨进程。

2、proxy在调用时:1 打包;2 检测;3 跨进程(跨进程时,当前客户端线程要挂起 ---同步情况)。

3 stub(服务端):onTransact(),通过 code 参数进入第二个 case(下图圈出)里,执行 this.addPerson()方法,就能调用到服务端正真的方法。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度,这是一个很好的选择,因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

【存储】存储特性

存储特性精简配置技术(SmartThin)SmartThin主要功能容量虚拟化存储空间写时分配:Capacity-on-Write读写重定向:Direct-on-Time应用场景及配置流程存储分层技术(SmartTier)存储分层工作原理关键技术容量初始…

智能电子标签——商超版价签

2.1英寸TFT黑白电子价签 ★ 快速变价,高效运营 ★ 市场实用,布局物联网未来 ★ 更好客户体验 ★ 降低系统成本,具备竞争力 ★ 2.1英寸黑白红电子价签 ★ 电池低能耗,常规使用三年 ★ 穿透力强不慣障碍 ★ 2.4G载波&#x…

position:sticky 粘性定位

1、什么是粘性定位? 粘性定位它基于用户的滚动位置来定位。 粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。 它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position…

图机器学习-图神经网络

图神经网络 前面讲了图机器学习的一些传统方法,现在正式进入到课程的核心部分:图神经网络。 Design of GNN 那么图神经网络和我们之前接触的一些深度神经网络有什么不同呢? 对于别的类型的神经网络,往往我们都是处理一些类似网…

win环境nginx下载安装和基本操作使用解析

win环境nginx下载安装和基本操作是我们技术人员必备的技能,今天我们大概梳理一下: 下载 地址:nginx: download 进入后点击: 选择某个版本,就可以下载了,然后解压到某个目录,进入配置文件&…

RAM IP Core

官方文档:ZYNQ 存储资源指导手册 (DS109) RAM 全称 Random Access Memory,随机存取存储器。 随时将数据写入任意指定地址的存储单元,或从任意地址读出数据。读写的速度是由时钟频率决定的。 RAM主要用于存放程序运行的中间数据、运算结果等…

MySQL实战45讲深入浅出索引下

select * from T where k between 3 and 5这个语句的执行流程是: 在 k 索引树上找到 k3 的记录,取得 ID 300;再到 ID 索引树查到 ID300 对应的 R3;在 k 索引树取下一个值 k5,取得 ID500.再回到 ID 索引树查到 ID500 …

深度学习-第T1周——实现mnist手写数字识别

深度学习-第T1周——实现mnist手写数字识别深度学习-第P1周——实现mnist手写数字识别一、前言二、我的环境三、前期工作1、导入依赖项并设置GPU2、导入数据集3、归一化4、可视化图片5、调整图片格式四、构建简单的CNN网络五、编译并训练模型1、设置超参数2、编写训练函数六、预…

【Python】Jupyter .ipynb

Jupyter启动Hello JupyterMarkdown纵然 Anaconda Pycharm 非常好用,但是既然学到 Jupyter,那就多掌握一份技能,毕竟 Jupyter 的确有他的优势在。 我认为 Jupyter 对于 Python 初学者来说,非常友善,他将一整个代码划分…

c#学习笔记

目录1.语句块2.Write和WriteLine的区别:3.params4.托管代码和非托管代码5.DllImport的使用:6.WriteLine、ReadLine和ReadKey:7.C#中访问修饰符8.类型的实例化9.成员可以分为两种:数据成员和函数成员10.枚举enum和结构struct的区别…

使用Debussy加载设计项目

Debussy是NOVAS Software, Inc(思源科技)用来进行HDL Debug & Analysis的工具,这套软体主要不是用来跑模拟或看波形,它最强大的功能是:能够在HDL source code、schematic diagram、waveform、state bubble diagram之间,即时做…

蓝桥杯-考勤刷卡

蓝桥杯-考勤刷卡1、问题描述2、解题思路3、代码实现1、问题描述 小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只 要在一天中员工刷过一次卡, 就认为他到岗了。 现在…

电子技术——数字逻辑反相器

电子技术——数字逻辑反相器 在学习完如何通过CMOS数字电路实现组合逻辑,接下来我们评估这种数字CMOS电路的性能。首先,我们考虑最基本的部件——反相器。 电压传导特性 下图是一个反相器的原理图: 在之前,我们已经介绍了MOSFE…

ATTCK v12版本战术介绍持久化(三)

一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术(一)及(二)知识,本期我们为大家介绍ATT&CK 14项战术中持久化战术(三)涉及的剩余子技术&…

汇编语言程序设计(一)

前言 在学习汇编语言之前,我们应该要知道汇编语言他是一门怎么样的语言。汇编语言是直接工作在硬件上的一门编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而…

高通平台开发系列讲解(显示篇)Gralloc模块

文章目录 一、什么是Gralloc模块二、Gralloc加载流程三、Gralloc模块的加载四、Gralloc设备的加载五、 fb设备的加载沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍显示过程中Gralloc模块。 一、什么是Gralloc模块 通过加载Gralloc抽象层,可以打开fb设备和…

【游戏逆向】寻路函数隐藏检测点分析

案例: 某游戏出现调用寻路函数失败异常崩溃。 基本情况分析: 在刚登陆游戏的时候直接调用寻路函数崩溃。 手动寻路以后再调用寻路不崩溃。(排除了函数编写错误的可能) 猜测可能检测方法: 有某一个标志位(全局类型)在游戏刚登陆的时候没…

【VS】【Qt】vs+ qt .natvis 失效问题

【VS】【Qt】vs qt .natvis 失效问题 .natvis文件用于调试时候自定义显示自定义类型的可视化提示。 一般这类文件存在 C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\Common7\Packages\Debugger\Visualizers路径下。 .natvis文件的规则在此不介绍&#xf…

剑指 Offer 23 链表中环的入口结点

摘要 链表中环的入口结点_牛客题霸_牛客网 剑指 Offer II 022. 链表中环的入口节点 141. 环形链表 142. 环形链表 II 一、是否有环(快慢指针) 我们可以根据上述思路来解决本题。具体地,我们定义两个指针,一快一慢。慢指针每次…