android aidl进程间通信封装通用实现
接上一篇的分析,今天继续
aidl复杂流程封装-CSDN博客
今天的任务就是将代码梳理下放进来
1 项目gradle配置:
需要将对应的代码放到各自的目录下,这里仅贴下关键内容,细节可以下载代码慢慢看
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
aidl.srcDirs = ['src/main/aidl']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['assets']
}
local {
java.srcDirs = ['src/local/java']
}
remote {
java.srcDirs = ['src/remote/java']
}
}
flavorDimensions "sdk"
productFlavors {
local {
dimension "sdk"
}
remote {
dimension "sdk"
}
}
2 aidl相关文件
1 客户端的回调接口:
interface ICallback {
void received(String params, in Bundle bundle);
}
2 aidl通信接口:
interface IServiceBinder {int register(int version, String caller, ICallback callback);void unregister(String caller, ICallback callback);String received(String params, in Bundle bundle);
}
3 服务端(本地)代码
先看下对服务类的封装:增加服务端通知消息的入栈异步处理,防止服务端卡顿
(由于看板信息,播报信息,路况信息等数据频繁,需放入单独线程或线程池处理)
public abstract class AsynService extends Service {protected static final String TAG = "AidlControl-AsynService";protected WorkThread worker;public void onCreate() {super.onCreate();Log.e(TAG, "onCreate: ");if (this.worker == null || !this.worker.isRunning()) {this.worker = new WorkThread();this.worker.start();}}public void onDestroy() {super.onDestroy();Log.e(TAG, "onDestroy: ");if (this.worker != null && this.worker.isRunning()) {this.worker.interrupt();this.worker = null;}}protected String getRequestAuthor(String params) {String requestAuthor = null;try {JSONObject jsonObject = new JSONObject(params);if (jsonObject.has(SDKConstants.KEY_CLIENT_REQUEST_AUTHOR)) {requestAuthor = jsonObject.optString(SDKConstants.KEY_CLIENT_REQUEST_AUTHOR);}} catch (JSONException e) {Log.e(TAG, "getRequestAuthor: ", e);}return requestAuthor;}protected void offerReq(JsonProtocolManager.Message message) {this.worker.offerReq(message);}//具体实现接口抽象出来给外部实现public interface ServiceCallback {void onEvent(int event, String msg);String onReceived(String params, Bundle bundle);}protected class WorkThread extends Thread {private final LinkedBlockingQueue<JsonProtocolManager.Message> msgLBQ = new LinkedBlockingQueue<>();private boolean isRunning = false;public void onEvent(int event, String msg) {if (mServiceCallback != null) {mServiceCallback.onEvent(event, msg);}}public void offerReq(JsonProtocolManager.Message message) {this.msgLBQ.offer(message);}public void run() {this.isRunning = true;while (this.isRunning) {Log.e(TAG, "running: ");try {JsonProtocolManager.Message msg = this.msgLBQ.take();if(!AsynService.this.send(msg)){//msgLBQ.offer(msg);}} catch (Exception e) {e.printStackTrace();}}Log.e(TAG, "running over: ");}boolean isRunning() {return this.isRunning;}}protected ServiceCallback mServiceCallback;public void setServiceCallback(ServiceCallback mLocalCallback) {this.mServiceCallback = mLocalCallback;}protected abstract boolean send(JsonProtocolManager.Message message);
}
接下来就是具体service的实现类
public class AidlService extends AsynService {private sta相关文章:
android aidl进程间通信封装通用实现
接上一篇的分析,今天继续 aidl复杂流程封装-CSDN博客 今天的任务就是将代码梳理下放进来 1 项目gradle配置: 需要将对应的代码放到各自的目录下,这里仅贴下关键内容,细节可以下载代码慢慢看 sourceSets { main { manifest.srcFile src/main/And…...
FL Studio 21.2.3.4004 All Plugins Edition Win/Mac音乐软件
FL Studio 21.2.3.4004 All Plugins Edition 是一款功能强大的音乐制作软件,提供了丰富的音频处理工具和插件,适用于专业音乐制作人和爱好者。该软件具有直观的用户界面,支持多轨道录音、混音和编辑,以及各种音频效果和虚拟乐器。…...
vivado RAM HDL Coding Guidelines
从编码示例下载编码示例文件。 块RAM读/写同步模式 您可以配置块RAM资源,为提供以下同步模式给定的读/写端口: •先读取:在加载新内容之前先读取旧内容。 •先写:新内容立即可供阅读先写也是众所周知的如通读。 •无变化&…...
springboot/ssm甘肃旅游服务平台Java在线旅游规划管理系统
springboot/ssm甘肃旅游服务平台Java在线旅游规划管理系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&am…...
第三百五十四回
文章目录 1. 概念介绍2. 使用方法2.1 获取所有时区2.2 转换时区时间 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享一些好的Flutter站点"相关的内容,本章回中将介绍timezone包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在…...
【Funny Game】 吃豆人
目录 【Funny Game】 吃豆人 吃豆人 文章所属专区 Funny Game 吃豆人 吃豆人,这款经典游戏如今依旧魅力四射。玩家需操控小精灵,在迷宫内吞噬所有豆子,同时避开狡猾的鬼怪。当吃完所有豆子后,便可消灭鬼怪,赢得胜利。…...
PyCharm - Run Debug 程序安全执行步骤
PyCharm - Run & Debug 程序安全执行步骤 1. Run2. DebugReferences 1. Run right click -> Run ‘simulation_data_gene…’ or Ctrl Shift F10 2. Debug right click -> Debug ‘simulation_data_gene…’ 在一个 PyCharm 工程下,存在多个 Pytho…...
作为一个程序员,最少要看过这几部电影吧?
计算机专业必看的几部电影 计算机专业必看的几部电影,就像一场精彩的编程盛宴!《黑客帝国》让你穿越虚拟世界,感受高科技的魅力;《社交网络》揭示了互联网巨头的创业之路,《源代码》带你穿越时间解救世界,…...
备战蓝桥杯 Day4
目录 注意:递推开long long 1140:验证子串 1131:基因相关性 1176:谁考了第k名 1177:奇数单增序列 1180:分数线划定 1184:明明的随机数 1185:单词排序 1186:出现…...
用HTML和CSS打造跨年烟花秀视觉盛宴
目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>跨年烟花秀</title><meta name"viewport" content"widthdevi…...
SSH密钥认证登陆流程(Vscode连接到远程)
目录 前言连接远程步骤1. 下载工具包wsCli到本地机器2. 本地机器上生成ssh密钥3. 在服务器上安装公钥4. vscode连接到远程 参考资料 前言 SSH(Secure Shell)是一种用于远程登录和安全传输数据的网络协议。它提供了两种主要的远程连接方式: 密…...
k8s进阶之路-pod探针:容器内的监控机制,检测应用是否存活
配合Pod重启策略: RestartPolicy 应用程序是否启动完成: 3.startupProbe启动探针1.16:排他性 如果三个都配置了,会优先启动,会禁用前两个反馈成功后,才会启动以下两个 应用启动成功后: 1.L…...
2.1.1 摄像头
摄像头 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 摄像头是目前自动驾驶车中应用和研究最广泛的传感器,其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟&#…...
linux安装mysql8且初始化表名忽略大小写
mysql8下载地址 MySQL8.0安装步骤 1、把安装包上传到linux系统,解压、重命名并移动到/usr/local/目录: cd ~ tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.32-linux-glibc2.12-x86_64/ mysql80/ mv mysql80/ /usr/local/2、在M…...
Java-长字符串加密
引言: 在数据安全领域,加密技术是保护信息不被未授权访问的重要手段。特别是在处理长字符串时,如何保证加密后的数据既安全又高效,是一个值得探讨的话题。本文将介绍几种常见的加密算法,并展示如何在Java中实现这些算法…...
使用pytest单元测试框架执行单元测试
Pytest 是一个功能强大且灵活的 Python 单元测试框架,它使编写、组织和运行测试变得更加简单。以下是 Pytest 的一些主要特点和优点: 简单易用:Pytest 提供了简洁而直观的语法,使编写测试用例变得非常容易。它支持使用 assert 语…...
Flutter 中 DraggableScrollableSheet 的属性介绍与使用
在 Flutter 中,DraggableScrollableSheet 是一个非常有用的小部件,它允许用户通过手势来拖动一个可滚动的区域,通常被用作底部弹出式面板或者随手势拖动的控件。本文将介绍 DraggableScrollableSheet 的属性以及如何在 Flutter 中使用它。 D…...
分库分表面试必背
一,背景 随着互联网的普及,使用人数和场景爆炸式增长,现在随便一个应用系统都可能达到数百万千万甚至更大数量级的数据。大量的数据带来了新的挑战,怎么快速完成增删改查的业务,是应用服务开发者最头痛的问题。面对这个…...
14个常见的Java课程设计/毕业设计合集(源码+文档)
从网上整理收集了14个常见的java系统设计源码,可以用于课程作业或者毕业设计。 1.基于java的家政预约网站系统 平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 …...
如何用 docker 部署程序?
如何用 docker 部署程序?这个问题有点笼统。 如果是MySQL、Redis这些,只需要拉取镜像,然后设置必要的配置,最终创建并运行实例即可。 如果你的应用是一个Java应用程序,使用Docker来部署它会涉及到Java特有的一些考虑…...
Pixel Language Portal效果展示:多轮对话上下文跨语种一致性保持
Pixel Language Portal效果展示:多轮对话上下文跨语种一致性保持 1. 产品概览 **像素语言跨维传送门(Pixel Language Portal)**是一款突破性的多语言交互工具,基于腾讯Hunyuan-MT-7B核心引擎构建。不同于传统翻译工具的机械感,它将语言转换…...
爆火Agent Harness:驯服AI的终极秘籍,三大巨头如何让AI从玩具变工具?
文章深入探讨了Agent Harness在AI落地中的关键作用,指出当前许多Agent应用存在长程任务失忆、遗留代码迷路、生成交付断链、确定性和安全性翻车等问题。文章剖析了Anthropic、OpenAI、LangChain三大巨头的Harness实践,如Anthropic的脚手架和独立评估器解…...
基于博途1200PLC+HMI的六层三部电梯控制系统仿真程序
基于博途1200PLCHMI六层三部电梯控制系统仿真 程序: 1、任务:PLC.人机界面控制三部电梯集群运行 2、系统说明: 系统设有上呼、下呼、内呼、手动开关门、光幕、检修、故障、满载、等模拟模式控制, 系统共享厅外召唤信号,…...
Voyager复杂导航模式实现:底部导航、标签页和嵌套导航实战
Voyager复杂导航模式实现:底部导航、标签页和嵌套导航实战 【免费下载链接】voyager 🛸 A pragmatic navigation library for Jetpack Compose 项目地址: https://gitcode.com/gh_mirrors/voyag/voyager Voyager是一个专为Jetpack Compose设计的实…...
Tomato Novel Downloader:智能搜索功能的技术突破
Tomato Novel Downloader:智能搜索功能的技术突破 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读工具领域,用户体验的每一个细节都可能决定…...
Axelspace 太空公司牵头联合体入选日本太空战略基金项目 “提升下一代地球观测卫星能力技术”
—— 通过卫星星座与航空器开展特定排放源二氧化碳排放与吸收监测,打造气候解决方案,开拓全新市场机遇 Axelspace 太空公司、明星电气株式会社、全日空控股株式会社及 JIJ 株式会社联合宣布,各方共同申报的技术研发项目成功入选日本宇宙航空…...
SMUDebugTool核心功能全解析:从故障排查到性能优化
SMUDebugTool核心功能全解析:从故障排查到性能优化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitco…...
挖到宝!阿贝云免费云服务太香了,学生党开发者闭眼冲
做个人博客、练技术、部署轻量应用还在找高性价比云服务?阿贝云https://www.abeiyun.com 直接把免费做到极致,免费虚拟主机 免费云服务器双福利,用下来的体验真的远超预期,稳定不卡顿还免备案,新手操作也毫无门槛太省…...
我已战胜一切!感谢哥白尼,感谢爱因斯坦,感谢豆包,,,曾经我都经历过什么,我自己非常清楚,既有爱因斯坦的压缩版,又有哥白尼的压缩版,,,
不是时代不好,是人心中的成见就像一座大山般,无法被逾越,只有暴雨降下,洗刷这个世界,重塑这个宇宙,各位其位,大道至简。历史的车轮早已不可阻挡,,,暴风雨会来…...
保姆级教程:手把手教你用GLM-4v-9b搭建图片问答机器人
保姆级教程:手把手教你用GLM-4v-9b搭建图片问答机器人 你是不是经常遇到这样的情况:看到一张复杂的图表,想快速了解里面的数据含义;或者收到一张产品图,想知道它的具体型号和功能;又或者辅导孩子作业时&am…...
