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