惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
A
About on SuperTechFans
量子位
Engineering at Meta
Engineering at Meta
B
Blog
The Cloudflare Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
J
Java Code Geeks
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - webabcd

开天辟地 HarmonyOS(鸿蒙) - 工具: Targets, Products 开天辟地 HarmonyOS(鸿蒙) - 测试: 单元测试 开天辟地 HarmonyOS(鸿蒙) - 优化: HiDebug(用于获取 cpu, 内存等信息) 开天辟地 HarmonyOS(鸿蒙) - 优化: errorManager(捕获未处理异常) 开天辟地 HarmonyOS(鸿蒙) - 优化: HiAppEvent(事件日志) 开天辟地 HarmonyOS(鸿蒙) - 优化: hilog 日志 开天辟地 HarmonyOS(鸿蒙) - 安全: 用户认证 开天辟地 HarmonyOS(鸿蒙) - 安全: 申请权限 开天辟地 HarmonyOS(鸿蒙) - 安全: 关键资产 开天辟地 HarmonyOS(鸿蒙) - 安全: 加密解密 开天辟地 HarmonyOS(鸿蒙) - 信息: CommonEventManager(用于进程间通信,以及订阅系统事件) 开天辟地 HarmonyOS(鸿蒙) - 信息: 各种信息 开天辟地 HarmonyOS(鸿蒙) - 华为账号: 华为账号的默认登录 开天辟地 HarmonyOS(鸿蒙) - 元服务: 元服务 开天辟地 HarmonyOS(鸿蒙) - 媒体: AVImageGenerator(提取视频指定时间点的图像) 开天辟地 HarmonyOS(鸿蒙) - 媒体: AVMetadataExtractor(提取视频或音频的元数据信息) 开天辟地 HarmonyOS(鸿蒙) - 媒体: AVTranscoder(视频转码) 开天辟地 HarmonyOS(鸿蒙) - 媒体: SoundPool(音效播放器) 开天辟地 HarmonyOS(鸿蒙) - 媒体: AVPlayer(播放器,用于播放视频或音频)
开天辟地 HarmonyOS(鸿蒙) - 信息: emitter(用于同一进程内...
webabcd · 2025-06-13 · via 博客园 - webabcd

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - 信息: emitter(用于同一进程内不同线程间或同一线程内发送和订阅事件)

示例如下:

pages\info\EmitterDemo.ets

/*
 * emitter - 用于同一进程内不同线程间或同一线程内发送和订阅事件
 *   可用于线程间通信
 *   可用于不同页面之间的通信
 *
 * emitter - 事件的发布与订阅
 *   once() - 订阅事件(只接收一次)
 *   on() - 订阅事件(一直接收直到取消订阅为止)
 *     event - 需要订阅的事件的标识(一个 InnerEvent 对象)
 *     callback - 接收到事件后的回调(回调参数是一个 EventData 对象)
 *   emit() - 发布事件
 *     event - 需要发布的事件的标识(一个 InnerEvent 对象)
 *     EventData - 需要发布的事件的数据(一个 EventData 对象)
 *   off() - 取消订阅
 * InnerEvent - 订阅或发布的事件的标识
 *   eventId - 标识
 *   priority - 优先级(EventPriority 枚举)
 *     优先级从高到低分别为 IMMEDIATE, HIGH, LOW, IDLE
 * EventData - 发布的或接收到的事件的数据
 *   data - 自定义的 key/value 数据
 */

import { MyLog, TitleBar } from '../TitleBar';
import { taskpool } from '@kit.ArkTS';
import { emitter } from '@kit.BasicServicesKit';

@Concurrent
async function fun(): Promise<void> {
  let count = 0
  while (count < 10) {
    await new Promise<void>((r) => {
      setTimeout(r, 1000)
    })

    let event: emitter.InnerEvent = {
      eventId: 1, // 事件的标识
      priority: emitter.EventPriority.IMMEDIATE // 优先级
    };

    // 发布的事件的数据
    let eventData: emitter.EventData = {
      data: {
        mykey: 'myvalue',
        count: count
      }
    };

    // 发布指定的事件
    emitter.emit(event, eventData);

    count ++
  }
}
async function sample(): Promise<void> {
  try {
    let task: taskpool.Task = new taskpool.Task(fun)
    await taskpool.execute(task)
  } catch (e) {
    MyLog.d(`error: ${JSON.stringify(e)}`)
  }
}

@Entry
@Component
struct EmitterDemo {

  @State message:string = ""

  aboutToAppear(): void {

    let event: emitter.InnerEvent = {
      eventId: 1, // 事件的标识
      priority: emitter.EventPriority.IMMEDIATE // 优先级
    };

    // 订阅事件的回调
    let callback: Callback<emitter.EventData> = (eventData: emitter.EventData) => {
      this.message += `${eventData.data?.["mykey"]}, ${eventData.data?.["count"]}\n`
    }

    // 订阅指定的事件
    emitter.on(event, callback);
  }

  aboutToDisappear(): void {
    // 取消指定标识的订阅
    emitter.off(1)
  }

  build() {
    Column({space:10}) {
      TitleBar()

      Text(this.message)

      Button("启动一个线程")
        .onClick(async () => {
          this.message += `开始\n`
          await sample()
          this.message += `结束\n`
        })
    }
  }
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd