私自建设网站,绿色食品网站模板.htm,网站建设与管理拼音,网站导航设计分析前提#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。#xff08;或有偏颇#xff0c;自行斟酌#xff09; 一、 概念 应用中#xff08;同一包名#xff09;的所有UIAbility运行在同一个独立进程中。WebView拥有独立的渲染进程。 应… 前提基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。或有偏颇自行斟酌 一、 概念 应用中同一包名的所有UIAbility运行在同一个独立进程中。WebView拥有独立的渲染进程。 应该有可以单独指定进程 HarmonyOS通过CESCommon Event Service公共事件服务为应用程序提供订阅、发布、退订公共事件的能力。 分为两种公共事件 系统公共事件CES内部定义的公共事件只有系统应用和系统服务才能发布例如HAP安装更新卸载等公共事件。目前支持的系统公共事件详见系统公共事件定义。 自定义公共事件应用自定义一些公共事件用来实现跨进程的事件通信能力。 公共事件—Receiver
公共事件按发送方式可分为无序公共事件、有序公共事件和粘性公共事件。 无序公共事件CES转发公共事件时不考虑订阅者是否接收到且订阅者接收到的顺序与其订阅顺序无关。 有序公共事件CES转发公共事件时根据订阅者设置的优先级等级优先将公共事件发送给优先级较高的订阅者等待其成功接收该公共事件之后再将事件发送给优先级较低的订阅者。如果有多个订阅者具有相同的优先级则他们将随机接收到公共事件。 粘性公共事件能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。普通的公共事件只能在订阅后发送才能收到而粘性公共事件的特殊性就是可以先发送后订阅。发送粘性事件必须是系统应用或系统服务且需要申请ohos.permission.COMMONEVENT_STICKY权限配置方式请参阅访问控制授权申请指导。 这一套就是消息通知机制的三种方式无序、顺序、粘性。
二、功能和使用
公共事件分为静态、动态订阅。
1.动态订阅
和Android一样逻辑代码编写中订阅而非配置文件中
import commonEventManager from ohos.commonEventManager;
import Base from ohos.base;//...// 用于保存创建成功的订阅者对象后续使用其完成订阅及退订的动作
let subscriber: commonEventManager.CommonEventSubscriber | null null;
// 订阅者信息
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo {events: [usual.event.SCREEN_OFF], // 订阅灭屏公共事件
}//...
// 创建订阅者回调
commonEventManager.createSubscriber(subscribeInfo, (err: Base.BusinessError, data: commonEventManager.CommonEventSubscriber) {if (err) {console.error(Failed to create subscriber. Code is ${err.code}, message is ${err.message});return;}console.info(Succeeded in creating subscriber.);subscriber data;// 订阅公共事件回调
})//---// subscriber为订阅事件时创建的订阅者对象
if (subscriber ! null) {commonEvent.unsubscribe(subscriber, (err) {if (err) {console.error([CommonEvent] UnsubscribeCallBack err${JSON.stringify(err)})} else {console.info([CommonEvent] Unsubscribe)subscriber null}})
}
2.静态订阅
它仅对系统应用开放 这也好理解毕竟Android系统中静态订阅会耗费电量、内存等一般应用不用这么重量级的消息订阅方式。
1.消费
import StaticSubscriberExtensionAbility from ohos.application.StaticSubscriberExtensionAbilityexport default class StaticSubscriber extends StaticSubscriberExtensionAbility {onReceiveEvent(event) {console.log(onReceiveEvent, event: event.event);}
}2.声明
{module: {......extensionAbilities: [{name: StaticSubscriber,srcEntrance: ./ets/StaticSubscriber/StaticSubscriber.ts,description: $string:StaticSubscriber_desc,icon: $media:icon,label: $string:StaticSubscriber_label,type: staticSubscriber,visible: true,metadata: [{name: ohos.extension.staticSubscriber,resource: $profile:subscribe}]}]......}
}3.发布事件
// 公共事件相关信息
let options {code: 1, // 公共事件的初始代码data: initial data, // 公共事件的初始数据
}//...// 发布公共事件
commonEventManager.publish(custom_event, options, (err) {if (err) {console.error([CommonEvent] PublishCallBack err JSON.stringify(err));} else {console.info([CommonEvent] Publish success)}
})当然这个是发布自定义事件的方法发布系统事件的方法也是一样将上述custom_event改为系统事件的action譬如usual.event.SCREEN_OFF,很明显它是息屏的动作。
三、总结
公共事件—Receiver