鸿蒙公共事件有哪些?(新手必看)
在应用程序中,经常会有各种事件发生。例如,当朋友给我的手机发送一条信息时,未读信息会在手机的通知栏显示。

图 1 公共事件
公共事件从系统角度可分为系统公共事件和自定义公共事件:
公共事件按发送方式可分为无序公共事件、有序公共事件和粘性公共事件:
每个应用都可以按需订阅公共事件,订阅成功且公共事件发布,系统会把其发送给应用。这些公共事件可能来自系统、其他应用和应用自身。
公共事件订阅开发接口如下:
公共事件发布开发接口如下:
公共事件取消订阅开发接口是 unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback)。
公共事件的分类
公共事件服务(Common Event Service,简称 CES)为应用程序提供了强大的事件处理能力,包括订阅、发布和退订公共事件,如下图所示。这一机制允许开发者灵活地管理和响应应用中的各种事件。
图 1 公共事件
公共事件从系统角度可分为系统公共事件和自定义公共事件:
- 系统公共事件:CES 内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如 HAP 安装、更新、卸载等公共事件;
- 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。
公共事件按发送方式可分为无序公共事件、有序公共事件和粘性公共事件:
- 无序公共事件:CES 在转发公共事件时,不考虑订阅者是否接收到该事件,也不保证订阅者接收到该事件的顺序与其订阅顺序一致。
- 有序公共事件:CES 在转发公共事件时,根据订阅者设置的优先级等级,优先将公共事件发送给优先级较高的订阅者,等待其成功接收该公共事件之后再将事件发送给优先级较低的订阅者。如果有多个订阅者具有相同的优先级,则他们将随机接收到公共事件。
- 粘性公共事件:能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。普通的公共事件只能在订阅后发送才能收到,而粘性公共事件的特殊性就是可以先发送后订阅,同时也支持先订阅后发送。发送粘性事件必须是系统应用或系统服务,粘性事件发送后会一直存储在系统中,且发送者需要申请 ohos.permission.COMMONEVENT_STICKY 权限,配置方式请参见声明权限。
每个应用都可以按需订阅公共事件,订阅成功且公共事件发布,系统会把其发送给应用。这些公共事件可能来自系统、其他应用和应用自身。
公共事件的开发
公共事件的开发主要涉及3部分,即公共事件订阅开发、公共事件发布开发、公共事件取消订阅开发。1) 公共事件订阅开发
当需要订阅某个公共事件,获取某个公共事件传递的参数时,可以创建一个订阅者对象,用于作为订阅公共事件的载体,订阅公共事件并获取公共事件传递而来的参数。订阅部分系统公共事件需要先申请权限。公共事件订阅开发接口如下:
- 创建订阅者对象(callback):createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback:AsyncCallback);
- 创建订阅者对象(promise):createSubscriber(subscribeInfo: CommonEventSubscribeInfo);
- 订阅公共事件:subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback)。
2) 公共事件发布开发
当需要发布某个自定义公共事件时,可以通过此方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。公共事件发布开发接口如下:
- 发布公共事件:publish(event: string, callback: AsyncCallback);
- 指定发布信息并发布公共事件:publish(event: string, options: CommonEventPublishData,callback: AsyncCallback)。
3) 公共事件取消订阅开发
订阅者需要取消已订阅的某个公共事件时,可以通过此方法取消订阅事件。公共事件取消订阅开发接口是 unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback)。