Android Binder与AIDL与Service使用案例及分析

水一篇以前写的文章🤣

Binder是Android内置的一种比较高效的跨进程机制,它很复杂,也很好用,可以让我们像调用普通方法那样完成跨进程式方法调用和数据传递。我们现在只需要知道它比较复杂以及怎么使用即可。

ALDL全名Android interface Definition Language, 是Android官方提供的简化Binder开发的工具,适用于Java、Kotlin开发。

所以很明显了,ALDL是小, Binder是大。

对于Binder的使用可以分为两种使用方式

  • 基于ALDL的标准用法(重点了解,因为是推荐方式)
  • 手动实现Binder 知道有这种情况即可

基于ALDL的标准用法

以Activity调用书籍管理中addBook(), addBook()在另外一个进程中的类设计为例:先给出以下设计图。

IBinder不能脱离Service使用的。必须要将您自己写的IBinder给到Service的onBind()方法中返回。原因我从根上讲一下:

  • 首先IBinder就是用来跨进程传递数据,调用方法的。相当于让我们以一种比较符合用户习惯的方式来向往常调用方法那样去跨进程。
  • 其次,Android的上层并没有提供开辟新的进程的API。也就是您完全没有权利开新进程。全部收回。
  • 那么您怎么开启新的进程呢? 开一个Service是一种方式。也没什么更好的方式,这个Service是由Android系统生成的给你用的。但是你需要在其onBind()方法中给到你的自定义IBinder。这个onBinder系统在JVM生成你的自定义Service实例后会调用这个方法,以获取您自定义的专用于跨进程的IBinder!
  • 当系统给到的Service连接成功时, 会在ServiceConnection中onServiceConnected()返回已经在底层Binder驱动中注册好的,您自定义的Binder对象代理。 这个ServiceConnection一般会被写在您的客户端,通常是Activity,进程A中,并在初始化自定义服务的时候,将ServiceConnection传入。于是您可以很轻松的从它的回调中拿到那个已经被处理好的,您在自定义Service onBind()绑定的自定义IBinder。
  • 接着您进程A里,就可以像平常调用方法那样使用这个Binder。 Binder于用户而言最大的意义就是,像调用普通代码那样跨进程。方便高效。

如果IBinder脱离Service使用呢?那是不可行的, 因为您没有新进程, 底层Binder驱动根本不知道您调用的相关方法信息应该传至哪个进程,从而出现问题。

Binder驱动使用入门

我先把上述文章的代码给简单的列出来以便于理解:

1. 定义 AIDL 接口

创建 .aidl 文件,声明服务接口:

// IBookManager.aidl
package com.example;、interface IBookMana

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

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

相关文章

基于ConvLSTM的行人检测与跟踪预测算法研究

基于ConvLSTM的行人检测与跟踪预测算法研究 摘要 本文详细探讨了基于ConvLSTM(卷积长短期记忆网络)的行人检测与跟踪预测算法的设计与实现。该算法结合了卷积神经网络(CNN)的空间特征提取能力和长短期记忆网络(LSTM)的时间序列建模优势,能够有效处理视频序列中的行人检测与…

深度学习基础2

5.张量索引操作 (1)索引操作 行列索引列表索引 print(data[[0, 2], [1, 2]]) #返回(0, 1),(2, 2)两个位置的元素print(data[[[0], [1]], [1, 2]]) # 返回0,1行的1,2列共4个元素范围索引 print(data[:3, :2]) # 前3行前…

Web安全:CSRF的攻击原理与防御措施

什么是 CSRF? CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种利用 浏览器自动携带 Cookie 的机制,诱骗用户在已登录目标网站的情况下,执行恶意操作的攻击方式。 攻击核心特点: 攻击者 不…

学习记录2025

1、Cmake相关 cmake -S . -B build -S . 表示CMakeLists.txt在哪个目录 -B build CMake生成结果在哪个路径 build就是路径名 简短 cmake -B build 或进入build 文件夹下 cmake cmake --build build 在build文件夹下编译 常量:CMAKE_CURRENT_LIST_DIR CMAKE…

GIT操作 学习

登录gitee登录方式:通过网站登录,使用注册时的账号(通常是手机号)和密码进行认证创建仓库 新建仓库步骤命名规范:仓库名称应尽量符合规范,避免与已有仓库冲突,建议使用有意义的命名…

[论文精读]StruQ: Defending Against Prompt Injection with Structured Queries

StruQ: Defending Against Prompt Injection with Structured Queries [2402.06363] StruQ: Defending Against Prompt Injection with Structured Queries usenix security 2025 提示注入攻击是一个重要的威胁:它们诱使模型偏离原始应用程序的指令,转…

磁悬浮轴承的反馈线性化:非线性控制的智能解耦之道

摘要:磁悬浮轴承凭借无摩擦、高速度、长寿命等优势,成为高速旋转机械的理想支撑方案。然而,其本质非线性与强耦合特性使得传统线性控制方法难以满足高性能要求。本文深入解析反馈线性化技术如何精确解除磁悬浮系统的非线性耦合,揭示其从微分几何理论到工程实现的核心路径,…

探寻《答案之书》:在随机中寻找生活的指引

我强烈推荐4本可以改变命运的经典著作: 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 在快节奏的现代生活中,人们常常面临各种困惑与抉择。当常规的思考与决策方式无法带来清晰答案时&am…

【PTA数据结构 | C语言版】计算1~n平方的和加上1~n的和

本专栏持续输出数据结构题目集,欢迎订阅。 文章目录 题目代码 题目 给定正整数 n,请编写程序,求 (12⋯n^2 )(12⋯n) 的值。 输入格式: 输入在一行中给出正整数 n(≤100)。 输出格式: 在一行中…

Assistant API的原理及应用

🧠 什么是 Assistants API? 📅 **发布日期:**2023年11月6日,OpenAI在开发者大会上发布了 Assistants API —— 一款面向开发者的工具,用于在应用中构建 AI 助手。 ✅ 它可以做什么? Assistants …

《北京市加快推动“人工智能+医药健康“创新发展行动计划(2025-2027年)》深度解读

引言 随着新一轮科技革命和产业变革的深入推进,人工智能技术与医药健康的深度融合已成为全球科技创新的重要方向。北京市于2025年7月正式发布《北京市加快推动"人工智能+医药健康"创新发展行动计划(2025-2027年)》,旨在充分发挥北京在人工智能技术策源、头部医疗…

DPDK 关于 IOMMU 设置

一、IOMMU 基础概念 定义:IOMMU(Input/Output Memory Management Unit)即输入 / 输出内存管理单元,它是一种硬件机制,用于将设备发出的内存访问请求进行地址转换。在现代计算机系统中,它在设备与内存之间起到桥梁作用,提供内存保护和设备隔离功能。作用: 内存保护:防止…

pg_class 系统表信息

SELECT c.relname, c.relkind, CASE WHEN c.relkind r THEN 普通表 WHEN c.relkind p THEN 分区表 WHEN c.relkind f THEN 外表 WHEN c.relkind v THEN 视图 WHEN c.relkind m THEN 物化视图 ELSE 其他 END as table_type_desc FROM pg_class c JOIN pg_namespace …

【C++开源库使用】使用libcurl开源库发送url请求(http请求)去下载用户头像文件(附完整源码)

目录 1、libcurl介绍 2、libcurl库源码下载与编译 3、调用libcurl库的API接口实现http/https请求发送,实现头像文件下载 4、发送图片url下载图片文件的完整代码展示 5、使用libcurl发送https请求时可能会遇到的两个错误 在某SDK项目中,第三方…

在Docker容器中更改,保存为新的镜像

# 1. 进入原始容器 docker run -it --name mydev ubuntu:20.04 /bin/bash# 2. 在容器内做大量修改 apt update && apt install -y python3 mkdir /app && echo print("Hello from modified container") > /app/app.py# 3. 退出容器 exit# 4. 保存…

【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南

【网络与爬虫 13】智能伪装:Scrapy-Fake-UserAgent反检测技术实战指南 关键词:Scrapy-Fake-UserAgent、反爬虫、智能伪装、浏览器指纹、用户代理、爬虫检测规避、自动更新UA 摘要:本文深入解析Scrapy-Fake-UserAgent库的工作原理与应用技巧&a…

前端开发常见问题

前端开发常见问题技术文章大纲 引言 简要介绍前端开发在当前技术环境中的重要性,以及开发者常遇到的挑战和痛点。 浏览器兼容性问题 不同浏览器对CSS、JavaScript的支持差异常见的Polyfill和转译工具(如Babel、PostCSS)如何利用Can I Use…

文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索

一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式开源文心大模型4.5系列(ERNIE 4.5),涵盖10款不同参数规模的模型&#xff0…

【操作系统】内存管理

要求: 1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。 2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表。 3、在设计好的数据结构上设计一个主存分配算法&#xff0…

【算法笔记】5.LeetCode-Hot100-矩阵专项

1. 矩阵置零(t73) 中等难度,题目示例如下: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…