使用Emitter进行线程间通信

@ohos.events.emitter (Emitter)

官网上有许多方法,本文只介绍了简单的emitter.emit()和emitter.on() 方法来进行线程间通信

Emitter主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。

1. 订阅事件

import { emitter } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
// 定义一个eventId为1的事件
let event: emitter.InnerEvent = {
  eventId: 1
};

// 这是收到eventId为1的事件后执行的回调函数
let callback = (eventData: emitter.EventData): void => {
  promptAction.showToast({
    message: JSON.stringify(eventData)
  });
};

// 订阅eventId为1的事件
emitter.on(event, callback);

2. 发送事件

import { emitter } from '@kit.BasicServicesKit';

// 定义一个eventId为1的事件,事件优先级为Low
let event: emitter.InnerEvent = {
  eventId: 1,
  priority: emitter.EventPriority.LOW
};

let eventData: emitter.EventData = {
  data: {
    content: 'c',
    id: 1,
    isEmpty: false
  }
};

// 发送eventId为1的事件,事件内容为eventData
emitter.emit(event, eventData);

简化写法:

import { emitter } from '@kit.BasicServicesKit'
// logger是自己封装的log

aboutToAppear(): void {
    // 在合适的地方订阅事件,写好到时候需要执行的代码
    emitter.on('myEvent', (event) => {
      logger.debug('myEvent', JSON.stringify(event.data))
    })
  }

build{
  Column{
    Button('触发事件')
        .onClick(() => {
          // 使用emitter.emit来广播事件,携带信息
          emitter.emit('myEvent', {
            data: { num: 100 }
          })
        })
  }
}

最后是文章封面~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值