【关键字】
API 10 / 线程间通信 / Emitter / Worker / EventHub
【问题描述】
-
问题1:API 9 中用于线程间通信的Emitter和Worker,还能否作为API 10 的最佳实践呢?
-
问题2:在API10的文档中没有找到线程内通信的EventHub,没有线程间通信的方法。
-
问题3:web组件的jsProxy在被前端调用的时候,回调发生在哪个线程中呢?
-
问题4:有没有类似于Android平台下的runOnUIThread方法或者Handler的方法?用Event思路去各种发消息的话代码可读性和维护性都会大打折扣。
【解决方案】
-
问题1:worker是一种ArkTS侧开启子线程的方式,本身是可以使用postMessage和主线程进行通信的。
emitter通过提供线程间发送和处理事件的能力,可以用于各种需要线程间通信的场景,但是暂时没法传对象。
-
问题2:eventHub是用于线程内通信。
-
问题3:前端JS调用时,是render进程,JS线程号和render进程的进程id是相同的,ets回调这边则是browser进程,他的id也是和线程号相同的。
-
问题4:目前不支持runOnUiThread写法。Worker支持通过PostMessage往父线程抛任务。TaskPool支持往父线程发消息,触发任务。