赞
踩
想的太多生活中就全是问题,可当你开始行动,这些问题其实都是有答案的,解决焦虑的最好方式,就是把所有的问题都落实到行动上,当你真正开始行动起来,你就会发现这些问题,其实都不是问题!
目录
类似于android中的EventBus线程间发送事件和处理事件,鸿蒙采用了Emitter来提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。
用于表示事件被发送的优先级。
系统能力: SystemCapability.Notification.Emitter
名称 | 值 | 说明 |
---|---|---|
IMMEDIATE | 0 | 表示事件被立即投递。 |
HIGH | 1 | 表示事件先于LOW优先级投递。 |
LOW | 2 | 表示事件优于IDLE优先级投递,事件的默认优先级是LOW。 |
IDLE | 3 | 表示在没有其他事件的情况下,才投递该事件。 |
on(event: InnerEvent, callback: Callback<EventData>): void
持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
event | InnerEvent | 是 | 持续订阅的事件,其中EventPriority,在订阅事件时无需指定,也不生效 |
callback | Callback<EventData> | 是 | 接收到该事件时需要执行的回调处理函数 |
once(event: InnerEvent, callback: Callback<EventData>): void
单次订阅指定的事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
event | InnerEvent | 是 | 单次订阅的事件,其中 EventPriority ,在订阅事件时无需指定,也不生效 |
callback | Callback<EventData> | 是 | 接收到该事件时需要执行的回调处理函数 |
off(eventId: number, callback: Callback<EventData>): void
取消针对该事件ID的订阅,传入可选参数callback,并且该callback已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
eventId | number | 是 | 事件ID |
callback10+ | Callback<EventData> | 是 | API version 10 新增取消该事件的回调处理函数。 |
emit(event: InnerEvent, data?: EventData): void
发送指定的事件。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
event | InnerEvent | 是 | 发送的事件,其中EventPriority用于指定事件被发送的优先级 |
data | EventData | 否 | 事件携带的数据 |
订阅或发送的事件,订阅事件时EventPriority
不生效。
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
eventId | number | 是 | 是 | 事件ID,由开发者定义用来辨别事件。 |
priority | EventPriority | 是 | 是 | 事件被投递的优先级。 |
发送事件时传递的数据。
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
data | [key: string]: any | 是 | 是 | 发送事件时传递的数据,数据类型支持字符串、整型和布尔型。 其中字符串长度最大为10240字节。 |
①简单封装一个EventBus单例:
- import emitter from '@ohos.events.emitter'
-
- export default class EventBus{
-
- private static instace: EventBus
-
- private constructor() {
-
- }
- static getInstance(): EventBus {
- if (!EventBus.instace) {
- EventBus.instace = new EventBus()
- }
- return EventBus.instace
- }
-
- //持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。
- on(name:number,callback:(eventData:emitter.EventData)=>void){
- let event :emitter.InnerEvent={
- eventId:name, //事件ID
- priority:emitter.EventPriority.IMMEDIATE //事件立即被投递
- }
- emitter.on(event,callback)
- }
-
-
- //取消针对该事件ID的订阅,传入可选参数callback,并且该callback已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。
- unregister(name:number){
- emitter.off(name)
- }
- //发送指定的事件
- post(name:number,data?:emitter.EventData){
- let event :emitter.InnerEvent={
- eventId:name, //事件ID
- priority:emitter.EventPriority.IMMEDIATE //事件立即被投递
- }
- let eventdata: emitter.EventData = {
- data:data
- }
- emitter.emit(event,eventdata)
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
②,定义事件id
- export enum AppEvent{
- EVENT_TEST = 1,
- EVENT_TEST2 = 2,
- EVENT_TEST3 = 3,
- }
③发送事件
- import EventBus from './EventBus'
- import { AppEvent } from './AppEvent'
- import emitter from '@ohos.events.emitter'
-
- @Entry
- @Component
- struct SecondPage {
- build() {
- Column() {
- Text("第二页").onClick(()=>{
- let data:emitter.EventData ={data:{
- name:"袁震",
- }}
- EventBus.getInstance().post(AppEvent.EVENT_TEST,data)
- })
-
- }.width("100%").height("100%")
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
④,订阅事件,解绑事件
- import { AppEvent } from './AppEvent'
- import EventBus from './EventBus'
-
- @Entry
- @Component
- struct FirstPage {
-
-
- aboutToAppear(){
- EventBus.getInstance().on(AppEvent.EVENT_TEST,(data)=>{
- console.info("yz----data:"+data.data)
- })
- }
-
- aboutToDisappear(){
- EventBus.getInstance().unregister(AppEvent.EVENT_TEST)
- }
-
- build() {
- Flex({direction: FlexDirection.Row,wrap: FlexWrap.Wrap}) {
- Text('袁震1').flexBasis('auto').width('25%').height(50).backgroundColor("#D2d28C")
- Text('袁震2').flexBasis(100).height(60).backgroundColor("#554433")
- Text('袁震3').flexBasis(200).width('35%').height(70).backgroundColor("#668888")
- Text('袁震3').width('40%').height(70).backgroundColor("#6688cc").flexBasis('60%')
- Text('袁震3').width('45%').height(70).backgroundColor("#668822").flexBasis('70%')
- Text('袁震3').width('50%').height(70).backgroundColor("#668866").flexBasis('80%')
- }.width("100%").height("100%")
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
使用很简单,和android框架EventBus也是非常相似
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。