在 HarmonyOS(鸿蒙)中,CommonEventManager 是用于 进程间通信(IPC)事件订阅发布 的核心组件之一。它允许应用或系统模块发布事件订阅事件,从而实现模块解耦、灵活通信。


📢 开天辟地 HarmonyOS(鸿蒙)——信息篇:CommonEventManager


✅ 一、CommonEventManager 是什么?

CommonEventManager 是 HarmonyOS 提供的 公共事件发布与订阅机制(Pub/Sub),用于:

  • 系统事件监听(如:开机、网络变化、充电状态)
  • 自定义事件发送(如模块间传递消息、状态通知)
  • 进程间通信(IPC)基础手段之一
  • 设备、服务之间的协同事件流转

相当于 Android 的 BroadcastReceiver,但更轻量、性能更好,且支持跨设备分布式事件订阅。


✅ 二、核心能力

能力类别说明
订阅系统事件监听如电池电量变化、网络状态、蓝牙开关等
发布/订阅自定义事件应用模块之间通信(例如:播放状态通知,下载进度同步)
进程间通信不同 Ability、不同应用间传递事件,实现异步消息流
分布式事件在多设备协同下,支持跨设备订阅与处理事件(需分布式使能)

✅ 三、基本结构图

+--------------------+
|    System Events   |
|  (battery, wifi...)|
+--------------------+
          ↓
+--------------------+         +--------------------+
|  CommonEventManager|<------->|   Your Application |
|   (事件中心)       |         |   (订阅/发布)       |
+--------------------+         +--------------------+
          ↑
+--------------------+
|   Other Apps /     |
|   Abilities / etc. |
+--------------------+


✅ 四、常用事件类型

🔹 1. 系统内置事件(部分示例)

事件名(event描述
common.event.BATTERY_CHANGED电池状态变化
common.event.SCREEN_ON屏幕开启
common.event.SCREEN_OFF屏幕关闭
common.event.TIME_TICK每分钟时间更新
common.event.CONNECTIVITY_CHANGE网络连接状态变更
common.event.DEVICE_BOOT_COMPLETED设备启动完成

📌 查看完整事件列表:官方文档或使用 DevEco Studio 的提示智能补全。


🔹 2. 自定义事件(自定义字符串)

开发者可以使用自定义事件名称进行模块通信:

const CUSTOM_EVENT = 'com.example.CUSTOM_ACTION';


✅ 五、eTS 使用示例(发布 & 订阅)

🔄 1. 发布事件(系统或自定义)

import commonEvent from '@ohos.commonEvent';

const eventData: commonEvent.CommonEventData = {
  event: 'com.example.CUSTOM_ACTION',
  parameters: {
    message: 'Hello from Module A',
    time: Date.now()
  }
};

commonEvent.publish(eventData)
  .then(() => {
    console.log('事件已发布');
  })
  .catch(err => {
    console.error('发布失败:', err);
  });


📥 2. 订阅事件

import commonEvent from '@ohos.commonEvent';

let subscriber;

const subscribeInfo: commonEvent.CommonEventSubscribeInfo = {
  events: ['com.example.CUSTOM_ACTION', 'common.event.SCREEN_OFF']
};

commonEvent.createSubscriber(subscribeInfo)
  .then(sub => {
    subscriber = sub;
    commonEvent.subscribe(subscriber, (eventData) => {
      console.log(`收到事件: ${eventData.event}`);
      console.log(`参数:`, eventData.parameters);
    });
  });


🧹 3. 取消订阅

commonEvent.unsubscribe(subscriber)
  .then(() => {
    console.log('已取消订阅');
  });


✅ 六、进程间通信场景

场景应用方式
服务 Ability 与 UI Ability 通信UI 订阅,服务通过事件发布状态更新
多模块解耦通信模块 A 发布事件,模块 B 订阅处理,实现逻辑隔离
异步任务状态同步下载、上传等操作完成后,通过事件通知界面更新进度
与系统事件联动如监听网络变化后重新连接、屏幕关闭暂停操作等逻辑处理

✅ 七、注意事项

注意点说明
❗ 事件名称需唯一、规范自定义事件请使用命名空间风格,如 com.example.ACTION_NAME
✅ 不同进程间通信需公共签名应用间通信建议使用系统支持的权限校验或签名一致策略
🔐 部分系统事件需要权限如监听开机完成、读取 SIM 卡状态等
⚠️ 避免发布高频事件会影响性能,应避免发布太频繁的事件

✅ 八、系统事件权限声明(如需要)

例如,监听网络变化需要权限声明:

"reqPermissions": [
  {
    "name": "ohos.permission.GET_NETWORK_INFO",
    "reason": "用于获取网络连接状态"
  }
]


✅ 九、分布式通信(进阶)

如果你的应用运行在多设备(手机、手表、电视)之间,可通过 CommonEventManager 实现:

  • 跨设备同步 UI 状态
  • 多端业务状态广播
  • 设备发现/协同事件传递

🧠 需搭配分布式能力(如 DMS、FA)实现远程事件同步。


✅ 十、总结

能力维度描述
发布订阅模式模块解耦,提升架构灵活性
支持系统/自定义事件监听电量、网络等系统事件,也支持自定义跨模块事件通信
支持跨进程通信实现 Ability/应用间的状态通知与数据流转
易用性高API 简单,开发成本低,适合用于状态通知、解耦通信等多种场景

✅ 一句话总结:

CommonEventManager 是 HarmonyOS 中轻量高效的事件通信总线,让你轻松实现模块间解耦与多端协同。


如果你需要:

  • 🔄 多事件订阅处理模板
  • 📦 分布式事件跨设备同步示例
  • 📋 自定义事件命名规范建议

可以继续告诉我,我可以为你准备好用的项目代码片段。是否继续深入「分布式通信」或「服务 Ability 与 UI 通信」内容?