鸿蒙 NEXT 开发中,使用公共事件进行进程间通信
1.35个Redis企业级性能优化点与解决方案2.对比传统数据库,TiDB 强在哪?谈谈 TiDB 的适应场景和产品能力3.深度长文解析SpringWebFlux响应式框架15个核心组件源码4.Nginx性能调优5招35式不可不知的策略实战5.Java Executors类的9种创建线程池的方法及应用场景分析6.Redis数据结构—跳跃表 skiplist 实现源码分析7.Volatile不保证原子性及解决方案8.吃透 JVM 诊断方法与工具使用9.Java RMI技术详解与案例分析10.通过JUnit源码分析学习编程的奇技淫巧11.什么是依赖倒置原则12.初探 Rust 语言与环境搭建13.为什么用Vite框架?来看它的核心组件案例详解14.Vue状态管理库Pinia详解15.Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?16.ECharts实现雷达图详解17.OpenFeign深入学习笔记18.阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略19.除了递归算法,要如何优化实现文件搜索功能20.关于建表字段是否该使用not null这个问题你怎么看?21.三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!22.在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?23.10款好用的开源 HarmonyOS 工具库24.尝鲜 HarmonyOS NEXT 开发环境搭建25.HarmonyOS NEXT 底部选项卡功能26.HarmonyOS NEXT 开发之ArkTS基础入门27.ArkTS 和仓颉的特性对比与案例28.Spark任务OOM问题如何解决?29.鸿蒙NEXT开发声明式UI是咋回事?30.HarmonyOS NEXT开发之ArkTS自定义组件学习笔记31.如何在鸿蒙 NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?32.鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?33.Java 如何确保 JS 不被缓存34.10月22日纯血鸿蒙正式版发布意味着什么?35.鸿蒙NEXT应用上架与分发步骤详解36.Java EasyExcel 导出报内存溢出如何解决37.Java Z 垃圾收集器如何彻底改变内存管理38.聊聊公众号联动扫码登录功能如何实现39.IDEA中通义灵码的使用技巧40.细谈 Linux 中的多路复用epoll41.适合才最美:Shiro安全框架使用心得42.MongoDB面试专题33道解析43.SQL Server 数据太多如何优化44.【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?45.Java灵魂拷问13个为什么,你都会哪些?46.异步编程在ArkTS中具体怎么实现?47.如何理解ArkTS不支持structural typing48.ArkTS四种渲染控制能力49.在ArkTS中,如何优化布局以提高性能?50.ArkUI与MVVM模式的诗和远方51.鸿蒙NEXT开发中如何确保使用 PersistentStorage 存储的数据安全?52.优雅的@ObservedV2和@Trace装饰器53.10个案例告诉你mysql不使用子查询的原因
54.鸿蒙 NEXT 开发中,使用公共事件进行进程间通信
55.鸿蒙NEXT开发中使用星闪服务56.鸿蒙NEXT使用request模块实现本地文件上传57.玩转 DevEco Studio 5 代码重构功能58.JAVA线程池有哪些队列? 以及它们的适用场景案例59.2025 年,程序员如何找准技术“掘金点”?60.鸿蒙 NEXT 开发中,普通对象跨线程如何传递61.什么是内存泄漏?C++中如何检测和解决?62.使用贪心算法解决最小生成树问题63.如何使用 Python 进行文件读写操作?64.如何在Python中高效地读写大型文件?65.2025春招,Spring 面试题汇总66.2025春招 SpringCloud 面试题汇总大家好,我是 V 哥,在鸿蒙 NEXT 开发中,使用公共事件进行进程间通信(IPC)是一种常见的做法。下面我将提供一个完整的业务代码示例,并解释逻辑关系,以便即使是初学者也能按照步骤进行实操,废话不多说,直接上干货。
业务场景
假设我们有两个应用,应用A和应用B。应用A需要在电量低时通知应用B执行一些操作,比如降低功耗或提醒用户充电。
步骤1:导入必要的模块
首先,我们需要导入鸿蒙提供的公共事件管理模块和其他必要的模块。
import { BusinessError, commonEventManager } from '@ohos.BasicServicesKit';
import { hilog } from '@ohos.PerformanceAnalysisKit';
步骤2:定义标签和域编号
为了在日志中标识我们的应用,我们需要定义一个标签和一个域编号。
const TAG: string = 'PowerSavingApp';
const DOMAIN_NUMBER: number = 0xFF00;
步骤3:创建订阅者信息
在应用B中,我们需要创建一个订阅者来监听应用A发布的电量低事件。
let subscriber: commonEventManager.CommonEventSubscriber | null = null;
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: ['device.battery.low'], // 订阅电量低事件
};
步骤4:创建订阅者对象
使用commonEventManager.createSubscriber
方法创建订阅者对象。
commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
return;
}
hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
subscriber = data;
});
步骤5:订阅公共事件
使用commonEventManager.subscribe
方法订阅事件。
if (subscriber !== null) {
commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);
return;
}
handleLowBatteryEvent(data);
});
} else {
hilog.error(DOMAIN_NUMBER, TAG, `Need to create subscriber`);
}
步骤6:处理电量低事件
定义一个函数来处理电量低事件。
function handleLowBatteryEvent(data: commonEventManager.CommonEventData) {
hilog.info(DOMAIN_NUMBER, TAG, `Received low battery event. Taking power saving measures.`);
// 这里可以添加降低功耗的具体操作,例如关闭后台任务、降低屏幕亮度等
}
步骤7:发布公共事件
在应用A中,当检测到电量低时,发布一个电量低事件。
let options: commonEventManager.CommonEventPublishData = {
code: 1,
data: 'Manual power saving triggered',
};
commonEventManager.publish('device.battery.low', options, (err: BusinessError) => {
if (err) {
hilog.error(DOMAIN_NUMBER, TAG, 'PublishCallBack err = ' + JSON.stringify(err));
} else {
hilog.info(DOMAIN_NUMBER, TAG, 'Publish success');
}
});
逻辑关系解释
- 创建订阅者:应用B创建一个订阅者,用于监听特定的事件(如电量低)。
- 订阅事件:应用B通过
subscribe
方法订阅特定的事件。 - 处理事件:当应用A发布电量低事件时,应用B的
handleLowBatteryEvent
函数会被触发,执行相应的功耗降低操作。 - 发布事件:应用A在检测到电量低时发布事件,通知应用B。
通过以上步骤,我们可以实现应用间的进程间通信。这个示例展示了如何使用鸿蒙的公共事件服务来实现跨应用的动态交互。希望这个示例能帮助你理解并实现自己的跨应用通信需求。
本文来自博客园,作者:威哥爱编程,转载请注明原文链接:https://www.cnblogs.com/wgjava/p/18647360
合集:
威哥爱编程
标签:
harmonyos
, harmonyos next
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目