目前开始写demo,由于以前没做过app开发,demo只是简单的展示SDK的调用。SDK初始化接口中有一个推送的回调函数,会把SDK的中间状态等信息推送给调用者,以便和用户交互。
那么问题来了,初始化接口不管是在主线程调用还是work线程调用,推送回调接口被调用的时机和线程都是不确定的,重要的问题就是要在任何线程调用回调时,界面都能有反应。
官方资料查询了一下,发现了Emitter的相关说明及示例如下:
Emitter主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。
Emitter的开发步骤如下:
-
订阅事件
import emitter from "@ohos.events.emitter"; // 定义一个eventId为1的事件 let event = { eventId: 1 }; // 收到eventId为1的事件后执行该回调 let callback = (eventData) => { console.info('event callback'); }; // 订阅eventId为1的事件 emitter.on(event, callback);
-
发送事件
import emitter from "@ohos.events.emitter"; // 定义一个eventId为1的事件,事件优先级为Low let event = { eventId: 1, priority: emitter.EventPriority.LOW }; let eventData = { data: { "content": "c", "id": 1, "isEmpty": false, } }; // 发送eventId为1的事件,事件内容为eventData emitter.emit(event, eventData);
参考示例略作修改,加入到程序里,目前还没有测试,后面有了结果再更新,总感觉不会这么顺利。