demo地址
https://github.com/MartinLi89/WanHarmony
目前只学到一部分,不正确的地方,还望大家指正,我会及时更新,谢谢,欢迎评论留言
线程内通信,线程间通信,进程间通信
本篇帖子中描述的比较宽泛,我自己认知中,通信包含两层含义
- 事件触发
- 数据共享同步
按照我的定义,此处会有以下分类
- 组件间
- 父子组件
- 跨代组件
- page页面间
- 单个UIAbility VS 其自身 page之间
- 多个UIAbility 之间
- 线程间
- 进程间
- 应用间
- 设备间
关键字 | 父子组件1 | 跨代组件 | page页面间 | UIAbility page | UIAbility 之间 | 线程间 | 进程间 | 应用间 | 设备间 | 缺点 |
---|---|---|---|---|---|---|---|---|---|---|
globalThis | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 相同名称的对象时,先存放的对象会被后存放的对象覆盖。 | |||
EventHub | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
LocalStorage | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
AppStorage | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
Emitter | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
Worker | ✔ | Worker中不能直接更新Page | ||||||||
IPC(Inter-Process Communication) | ✔ | ✔ | ✔ | ✔ | ||||||
RPC(Remote Procedure Call) | ✔ | 需要native, c开发 |
globalThis
EventHub
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.eventHub.on(CommonValues.LOCAL_PAGE, () => {
promptAction.showToast({
message: "eventHub LOCAL_PAGEadsdsd"
})
let want: Want = {
bundleName: 'com.example.wanharmony',
moduleName: 'entry',
abilityName: 'EntryPictureAbility'
}
this.context.startAbility(want)
})
}
Text(item.title)
.height(40)
.padding(4)
.margin(4)
.backgroundColor(this.getRandomColor())
.borderRadius(4)
.onClick(() => {
if (item.link === CommonValues.LOCAL_PAGE) {
getContext().eventHub.emit(CommonValues.LOCAL_PAGE)
}
})
})
线程间通信
emitter . 线程间通信
Worker
进程间通信
- commentEventManager
进行进程间通信- 公共事件发布 + 自定义事件发布 - socket