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

AIDL进程间通信

一、项目开启AIDL

在使用AIDL的模块下build.gradle 文件中添加以下代码

android {...buildFeatures {aidl true}
}

操作完需要rebuild

二、创建aidl服务接口

假设当前所需要的包名为com.jingluo.test_aidl ,那么aidl就需要处于同样的路径下,即如下目录格式。假设服务接口文件为IModuleServiceIModuleCallback。实现接口的文件为TestAIDLService

- main- aidl- com- jingluo- test_aidl- IModuleService.aidl- IModuleCallback.aidl- kotlin-com- jingluo- test_aidl- TestAIDLService.kt

aidl支持如下几种数据类型

  • 基本数据类型:
    boolean:布尔值(true 或 false)
    byte:8 位有符号整数
    char:16 位 Unicode 字符
    double:64 位双精度浮点数
    float:32 位单精度浮点数
    int:32 位有符号整数
    long:64 位有符号整数
    short:16 位有符号整数
  • Java 对象:
    String:字符串
    CharSequence:字符序列
  • Bundle:
    Bundle 类可以用于在进程间传递一组键值对的集合,类似于一个映射表。
  • List 和 Map:
    List:支持基本数据类型和支持 Parcelable 接口的对象类型的列表。
    Map<K, V>:支持基本数据类型和支持 Parcelable 接口的对象类型的映射表。
  • Parcelable:
    自定义的类如果实现了 Parcelable 接口,也可以在 AIDL 中使用。这是一个用来序列化对象的接口,可以将对象数据从一个进程传递到另一个进程。
  • Surface
  • RemoteView

IModuleService.aidl

package com.jingluo.test_aidl;import android.view.Surface;
import com.jingluo.test_aidl.IModuleCallback;interface IModuleService {void handleMethod(String method);void registerCallback(IModuleCallback callback);
}

IModuleCallback.aidl

package com.jingluo.test_aidl;interface IModuleCallback {void onLoginCallback(int code, String msg);
}

操作完需要rebuild

三、aidl接口实现(服务端)

TestAIDLService.kt

...
import android.os.IBinder
import android.app.Service
import com.jingluo.test_aidl.IModuleCallback
import com.jingluo.test_aidl.IModuleService
...class TestAIDLService: Service() {private lateinit var context: Context// 按需实现,我这里主要是需要拿到Contextoverride fun onCreate() {super.onCreate()context = this}private var remoteCallback: IModuleCallback? = nullprivate val binder = object : IModuleService.Stub() {override fun handleMethod(method: String) {if (method == "loginResult") {// eg. remoteCallback?.onLoginCallback(0, "success")} else if (method == "login") {// 具体实现}}override fun registerCallback(callback: IModuleCallback) {remoteCallback = callback;DeviceManager.registerRemoteCallback(callback)}}override fun onBind(p0: Intent?): IBinder {return binder}
}

四、客户端使用

...
import com.jingluo.test_aidl.TestAIDLService
...class TestAIDLActivity: AppCompatActivity() {private var moduleService: IModuleService? = nullprivate val moduleCallback = object : IModuleCallback.Stub() {override fun onLoginCallback(code: Int, msg: String) {/// 相应处理}}private val mDeathRecipient: IBinder.DeathRecipient = object : IBinder.DeathRecipient {override fun binderDied() {// 解绑当前监听,重新启动服务moduleService?.asBinder()?.unlinkToDeath(this, 0)moduleService = null// 重新绑定服务bindService()}}private val connection: ServiceConnection = object : ServiceConnection {override fun onServiceConnected(name: ComponentName, service: IBinder) {moduleService = IModuleService.Stub.asInterface(service)moduleService?.registerCallback(moduleCallback)moduleService?.asBinder()?.linkToDeath(mDeathRecipient, 0)}override fun onServiceDisconnected(name: ComponentName) {moduleService = null}}private fun bindService() {val intent = Intent(context, TestAIDLService::class.java)context.bindService(intent, connection, Context.BIND_AUTO_CREATE)}
}

同时需要在AndroidManifest.xml中进行声明该服务。注意android:process必须设置,否则分进程不生效。

<application><service android:name=".TestAIDLService"android:process=":remote"android:enabled="true"android:exported="false" />
</application>

相关文章:

AIDL进程间通信

一、项目开启AIDL 在使用AIDL的模块下build.gradle 文件中添加以下代码 android {...buildFeatures {aidl true} }操作完需要rebuild 二、创建aidl服务接口 假设当前所需要的包名为com.jingluo.test_aidl &#xff0c;那么aidl就需要处于同样的路径下&#xff0c;即如下目录…...

线程同步与互斥

系统11. 线程同步与互斥 1. 线程互斥 1-1 进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执⾏流共享的资源就叫做临界资源临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有…...

腾讯一面面经:总结一下

1. Java 中的 和 equals 有什么区别&#xff1f;比较对象时使用哪一个 1. 操作符&#xff1a; 用于比较对象的内存地址&#xff08;引用是否相同&#xff09;。 对于基本数据类型、 比较的是值。&#xff08;8种基本数据类型&#xff09;对于引用数据类型、 比较的是两个引…...

某地农产品交易中心钢网架自动化监测项目

1. 项目简介 本项目规划建设现代物流产业园&#xff0c;新建6万平方米仓库&#xff0c;具体为新建3栋钢构仓库2万平方米&#xff0c;2栋砖混结构仓库1万平方米&#xff0c;3栋交易中心2万平方米&#xff0c;改造现有3栋3层砖混结构仓库1万平方米&#xff0c;配备智能化仓库物流…...

PGSql查看表结构以及注释信息

创建视图 CREATE OR REPLACE VIEW dbo.v_sys_tableinfo AS SELECT pc.relname AS tablename, pa.attname AS columnname, pt.typname AS columntype, CASE WHEN pa.attlen > 0 THEN pa.attlen::integer ELSE pa.atttypmod - 4 END AS columnlength, pa.attnotnull …...

C++23 中 constexpr 的重要改动

文章目录 1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)示例代码 2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)示例代码 3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)示例代码 4. 不存在满足核心常量…...

Linux服务器上mysql8.0+数据库优化

1.配置文件路径 /etc/my.cnf # CentOS/RHEL /etc/mysql/my.cnf # Debian/Ubuntu /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian检查当前配置文件 sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$&q…...

深度学习之卷积神经网络入门

一、引言 在深度学习蓬勃发展的今天&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;凭借其在图像识别、计算机视觉等领域的卓越表现&#xff0c;成为了人工智能领域的核心技术之一。从手写数字识别到复杂的医学影像分析&a…...

【kafka初学】启动执行命令

接上篇&#xff0c;启动&#xff1a;开两个cdm窗口 注意放的文件不要太深或者中文&#xff0c;会报命令行太长的错误 启动zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 启动kafka-serve bin\windows\kafka-server-start.bat config\serv…...

MoE架构解析:如何用“分治”思想打造高效大模型?

在人工智能领域&#xff0c;模型规模的扩大似乎永无止境。从GPT-3的1750亿参数到传闻中的GPT-4万亿级规模&#xff0c;每一次突破都伴随着惊人的算力消耗。但当我们为这些成就欢呼时&#xff0c;一个根本性问题愈发尖锐&#xff1a;如何在提升模型能力的同时控制计算成本&#…...

【Qt】文件

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; Qt 文件概述 二&#xff1a;&#x1f525; 输入输出设备类 三&#xff1a;&#x1f525; 文件读写类 四&#xff1a;&#x1f525; 文件和目录信息类 五&…...

Linux常见故障:排查思路与错误分析指南

引言 当Linux系统"生病"时&#xff0c;它不会说话但却会通过各种症状"求救"&#x1f198;&#xff01;本文将带你建立系统化的故障排查思维&#xff0c;从磁盘到内存&#xff0c;从网络到服务&#xff0c;全方位掌握Linux系统的"把脉问诊"技巧。…...

基于随机变量的自适应螺旋飞行麻雀搜索算法(ASFSSA)优化BP神经网络,附完整完整代码

3. 麻雀搜索算法 麻雀群体分为两个角色&#xff0c;即发现者和跟随者。它们有三个行为&#xff1a;觅食、跟随和侦察。发现者的任务是寻找食物并告知跟随者食物的位置。因此&#xff0c;发现者需要在一个大范围内搜索&#xff0c;而跟随者的觅食范围通常较小。这是更新发现者位…...

vscode切换Python环境

跑深度学习项目通常需要切换python环境&#xff0c;下面介绍如何在vscode切换python环境&#xff1a; 1.点击vscode界面左上角 2.在弹出框选择对应kernel...

Gradle安装与配置国内镜像源指南

一、Gradle简介与安装准备 Gradle是一款基于JVM的现代化构建工具&#xff0c;广泛应用于Java、Kotlin、Android等项目的构建自动化。相比传统的Maven和Ant&#xff0c;Gradle采用Groovy或Kotlin DSL作为构建脚本语言&#xff0c;具有配置灵活、性能优越等特点。 在开始安装前…...

施工配电箱巡检二维码应用

在过去&#xff0c;施工配电箱的巡检主要依赖于纸质记录方式。巡检人员每次巡检时&#xff0c;都要在纸质表格上详细填写配电箱的各项参数、运行状况以及巡检时间等信息。这种方式在实际操作中暴露出诸多严重问题&#xff0c;信息易出现错误、数据会有造假现象、数据量庞大整理…...

全链路自动化AIGC内容工厂:构建企业级智能内容生产系统

一、工业化AIGC系统架构 1.1 生产流程设计 [需求输入] → [创意生成] → [多模态生产] → [质量审核] → [多平台分发] ↑ ↓ ↑ [用户反馈] ← [效果分析] ← [数据埋点] ← [内容投放] 1.2 技术指标要求 指标 标准值 实现方案 单日产能 1,000,000 分布式推理集群 内容合规率…...

第19章:Multi-Agent多智能体系统介绍

第19章:Multi-Agent多智能体系统介绍 欢迎来到多智能体系统 (Multi-Agent System, MAS) 的世界!在之前的章节中,我们深入探讨了单个 AI Agent 的构建,特别是结合了记忆、上下文和规划能力的 MCP 框架。然而,现实世界中的许多复杂问题往往需要多个智能体协同工作才能有效解…...

【C++游戏引擎开发】第25篇:方差阴影贴图(VSM,Variance Shadow Maps)

一、VSM 的核心思想 1.1 VSM 的核心思想 1.1.2 从深度到概率的转变 VSM 的核心创新在于将阴影判定从深度比较转换为概率估算。通过存储深度分布的统计信息(均值和方差),利用概率不等式动态计算阴影强度,从而支持软阴影并减少锯齿。 1.1.3 深度分布的统计表示 VSM 在阴…...

代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)

贪心算法 Part05 合并区间 力扣题目链接 代码随想录链接 视频讲解链接 题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0…...

yum包管理器

1.介绍 yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器.自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的安装包。 2.yum基本指令 查询yum服务器是否有需要安装的软件&#xff1a; yum list I grep xx软件列表. 安装指定的yum包&…...

Linux多线程技术

什么是线程 在一个程序里的多执行路线就是线程。线程是进程中的最小执行单元&#xff0c;可理解为 “进程内的一条执行流水线”。 进程和线程的区别 进程是资源分配的基本单位&#xff0c;线程是CPU调度的基本单位。 fork创建出一个新的进程&#xff0c;会创建出一个新的拷贝&…...

通过模仿学习实现机器人灵巧操作:综述(上)

25年4月来自天津大学、山东大学、瑞士ETH、南方科技大学、通用 AI 国家重点实验室、爱丁堡大学和中科院自动化所的论文“Dexterous Manipulation through Imitation Learning: A Survey”。 灵巧操作是指机械手或多指末端执行器通过精确、协调的手指运动和自适应力调制&#x…...

LLM数学推导——Transformer问题集——注意力机制——稀疏/高效注意力

Q13 局部窗口注意力的内存占用公式推导&#xff08;窗口大小 &#xff09; 局部窗口注意力&#xff1a;解决长序列内存困境的利器 在注意力机制中&#xff0c;全局注意力需要计算序列中每个元素与其他所有元素的关联&#xff0c;当序列长度 N 较大时&#xff0c;权重矩阵的内…...

Git 入门知识详解

文章目录 一、Git 是什么1、Git 简介2、Git 的诞生3、集中式 vs 分布式3.1 集中式版本控制系统3.2 分布式版本控制系统 二、GitHub 与 Git 安装1、GitHub2、Git 安装 一、Git 是什么 1、Git 简介 Git 是目前世界上最先进的分布式版本控制系统。版本控制系统能帮助我们更好地管…...

系统架构师2025年论文《论软件架构评估》

论软件架构评估 摘要: 我所在的单位是国内某知名医院,2017 年 1 月医院决定开发全新一代某市医院预约挂号系统,我担任本次系统的架构师,主要负责整个系统的架构设计工作。该系统旨在优化医院挂号流程,提高患者就医体验,是医院应对医疗信息化变革和提升服务的重要举措。…...

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&…...

抓包工具Wireshark的应用解析

一、Wireshark简介 Wireshark&#xff08;前身为Ethereal&#xff09;是一款开源、跨平台的网络协议分析工具&#xff0c;自1998年诞生以来&#xff0c;已成为网络工程师、安全专家及开发者的核心工具之一。它通过网卡的混杂模式&#xff08;Promiscuous Mode&#xff09;捕获…...

在 Java 项目中搭建和部署 Docker 的详细流程

引言 在现代软件开发中&#xff0c;Docker 已成为一种流行的工具&#xff0c;用于简化应用的部署和运行环境的一致性。本文将详细介绍如何在 Java 项目中搭建和部署 Docker&#xff0c;包括配置文件、代码示例以及流程图。 一、整体工作流程 以下是整个流程的概览&#xff1a…...

15.ArkUI Checkbox的介绍和使用

以下是 ArkUI Checkbox 组件的详细介绍和使用指南&#xff1a; 一、Checkbox 基础介绍 功能特性&#xff1a; 提供二态选择&#xff08;选中/未选中&#xff09;支持自定义样式和标签布局支持与数据状态绑定提供状态变化事件回调 适用场景&#xff1a; 表单中的多选操作设置…...

WebUI可视化:第5章:WebUI高级功能开发

学习目标 ✅ 掌握复杂交互逻辑的实现 ✅ 学会自定义界面样式与布局 ✅ 实现安全高效的文件处理 ✅ 优化性能与用户体验 5.1 自定义样式开发 5.1.1 修改主题颜色(以Streamlit为例) 在应用入口处添加全局样式: python import streamlit as st # 自定义主题 st.markdown…...

增加首屏图片

增加首屏图片&#xff08;bg.jpg&#xff09; web-mobile类型打包 //index.html脚本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戏内脚本…...

联合体和枚举类型

1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样&#xff0c;联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成&#xff0c;这些成员变量既可以是不同的类型&#xff0c;也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...

《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现

构建基于Flask和Ollama的AI助手聊天网站&#xff1a;分布式架构与ngrok内网穿透实现 引言 随着AI技术的快速发展&#xff0c;构建自己的AI助手聊天网站变得越来越流行。本研究报告将详细介绍如何通过两台电脑构建一个完整的AI聊天系统&#xff0c;其中一台作为WEB服务器运行F…...

kubernets集群的安装-node节点安装-(简单可用)-超详细

一、kubernetes 1、简介 kubernetes&#xff0c;简称K8s&#xff08;库伯内特&#xff09;&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写 云计算的三种主要服务模式——基础设施即服务&#xff08;IaaS&#xff09;、平台即服务&#xff08;PaaS&#xff0…...

【Linux内核设计与实现】第三章——进程管理04

文章目录 8. exit() 进程退出8.1. exit() 系统调用的定义8.2. do_exit() 函数8.2.0. do_exit() 的参数和返回值8.2.1. 检查和同步线程组退出8.2.2. 清理与调试相关的资源8.2.3. 取消 I/O 和信号处理8.2.4. 检查线程组是否已终止8.2.5. 释放系统资源8.2.6. 释放线程和调度相关资…...

Golang | 迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象&#xff08;如列表、树等集合结构&#xff09;中元素的方法&#xff0c;而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦&#xff0c;迭代器模式使…...

美颜SDK动态贴纸实战教程:从选型、开发到上线的完整流程

在直播、短视频、社交娱乐全面崛起的当下&#xff0c;美颜SDK早已不再局限于“磨皮瘦脸”&#xff0c;而是逐步迈向更智能、更富互动体验的方向发展。动态贴纸功能&#xff0c;作为提升用户参与感和内容趣味性的关键手段&#xff0c;正在被越来越多的平台采纳并深度定制。本文将…...

ArkTS中的空安全:全面解析与实践

# ArkTS中的空安全&#xff1a;全面解析与实践 在ArkTS编程领域&#xff0c;空安全是一个极为关键的特性&#xff0c;它在很大程度上影响着代码的稳定性和可靠性。今天&#xff0c;我们就深入探究一下ArkTS中的空安全机制&#xff0c;看看它是如何保障我们的代码质量的。 ## A…...

C语言基础语法详解:从入门到掌握

C 基础语法 C 语言是一种通用的编程语言&#xff0c;广泛应用于系统编程、嵌入式开发和高性能计算等领域。 C 语言具有高效、灵活、可移植性强等特点&#xff0c;是许多其他编程语言的基础。 在 C 语言中&#xff0c;令牌&#xff08;Token&#xff09;是程序的基本组成单位…...

如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并

在日常生活中&#xff0c;我们经常需要将多个视频片段合并成一个完整的视频&#xff0c;例如制作旅行记录、剪辑教学视频或拼接短视频素材。简鹿视频格式转换器是一款功能强大的工具&#xff0c;不仅可以进行视频格式转换&#xff0c;还支持视频合并功能。以下是使用简鹿视频格…...

Servlet小结

视频链接&#xff1a;黑马servlet视频全套视频教程&#xff0c;快速入门servlet原理servlet实战 什么是Servlet&#xff1f; 菜鸟教程&#xff1a;Java Servlet servlet&#xff1a; server applet Servlet是一个运行在Web服务器&#xff08;如Tomcat、Jetty&#xff09;或应用…...

C语言面试高频题——define 和typedef 的区别?

1. 基本概念 (1) #define 定义&#xff1a;#define 是预处理指令&#xff0c;用于定义宏。作用&#xff1a;在编译之前进行文本替换。语法&#xff1a;#define 宏名 替换内容示例&#xff1a;#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义&#xff1a;…...

计算机组成原理:指令系统

计算机组成原理:指令集系统 指令集体系结构(ISA)ISA定义ISA包含的内容举个栗子指令的基本组成(操作码+地址码)指令分类:地址码的个数定长操作码变长操作码变长操作码的原则变长操作码的设计指令寻址寻址方式的目的寻址方式分类有效地址直接在指令中给出有效地址间接给出有效地…...

自动清空 maven 项目临时文件,vue 的 node_modules 文件

echo off setlocal enabledelayedexpansion :: vue 的 node_modules 太大 :: maven 打包后的 target 文件也很大&#xff0c; :: 有些项目日志文件也很大&#xff0c;导致磁盘空间不足了&#xff0c; :: 所以写了个脚本&#xff0c;只要配置一下各项目目录&#xff0c; :: 双击…...

服务网格助力云原生后端系统升级:原理、实践与案例剖析

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:微服务的“通信焦虑”与服务网格的出现 云原生架构的兴起推动了微服务的大规模落地,系统拆分为成百上千个小服务,这些服务之间需要频繁通信。然而,通信带来的问题也开始显现: 如何确保服务间…...

基于DrissionPage的表情包爬虫实现与解析(含源码)

目录 ​编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…...

Spring Cloud Gateway 如何将请求分发到各个服务

前言 在微服务架构中&#xff0c;API 网关&#xff08;API Gateway&#xff09;扮演着非常重要的角色。它负责接收客户端请求&#xff0c;并根据预定义的规则将请求路由到对应的后端服务。Spring Cloud Gateway 是 Spring 官方推出的一款高性能网关&#xff0c;支持动态路由、…...

【深度强化学习 DRL 快速实践】Value-based 方法总结

强化学习中的 Value-based 方法总结 在强化学习&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;Value-based 方法主要是学习一个价值函数&#xff08;Value Function&#xff09;&#xff0c;然后基于价值函数来决策。常见的 Value-based 方法包括&#xf…...

【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析

基于YOLOv5的人脸检测与关键点定位系统深度解析 1. 技术背景与项目意义传统方案的局限性YOLOv5多任务方案的优势 2. 核心算法原理网络架构改进关键点回归分支损失函数设计 3. 实战指南&#xff1a;从环境搭建到模型应用环境配置数据准备数据格式要求数据目录结构 模型训练配置文…...