作为一个打工人,尤其在一线城市,生活节奏很快,我们每天不仅想办法合理安排时间,还想让自己的生活过的精致。比如早上7点钟闹钟响起,同时家里的窗帘打开,1分钟之后,豆浆机开始磨豆浆,电饭煲开始热早餐。从起床洗漱、吃饭到出门10分钟全搞定。
这种生活是不是离我们越来越近了呢?2020年9月份,华为CBG软件部总裁王成录博士在HDC上说华为从做HarmonyOS以来,一直想解决一个问题:随着IOT设备多起来之后,让消费者仍然像使用单设备一样简单。这样,跨设备调用的问题需要被解决。
再给大家放一个经典场景:
这个场景实现了平板、智慧屏、手机3种设备无缝流转,这其实就是HarmonyOS最核心的分布式关键理念,具体技术用到了,分布式调用、状态迁移/同步,它支持跨设备的流转、无缝持续和协同。具体如何实现的呢,请看下图:
1. PAD 远程拉起 TV 上视频播放的元程序(FA:Feature Ability);
2. PAD远程启动播放指定的视频节目;
3. PAD远程调节视频播放进度、音量等;
4. Phone 启动本地视频播放 FA;
5. Phone连接 TV 上的视频播放 FA;
6. Phone 获取 TV 视频链接与内容;
7. Phone 远程关闭 TV 上的视频播放 FA;
以上的功能就是通过 HarmonyOS 分布式调度能力完成的,简要一点说就是开发一个视频播放的 FA,提供设置播放内容、调节视频播放进度、音量等访问接口,实现状态保存与恢复的接口。
原理大家估计能知道个大概。但是可能还是觉得这是一个黑盒子。那我们就简单的聊一聊:
1、 什么是分布式调度
分布式调度是为解决跨设备软件之间相互访问问题的分布式系统服务。在传统的终端设备上跨设备访问应用时,需要应用自己完成服务发现、连接、命令监听/解析等一系列的工作,无论是应用开发者自己开发,还是使用第三方的库,都让应用开发过程变得沉重。然而,HarmonyOS分布式任务调度就是在系统层面,为应用提供了通用的分布式服务,让应用开发可以聚焦在业务实现上。
分布式调度在 HarmonyOS 中的定位
分布式调度在 HarmonyOS 中架构位置
2、分布式调度的能力范围
分布式调度主要提供跨设备软件相互访问与协同的能力,是对以 Ability 为基础单元的管理控制能力,并提供相互访问的基础架构与方法。
全局查询:遍历查找多个设备上可以被跨设备访问的应用与服务。
远程启动:启动其他设备上的应用与服务。
远程连接:绑定远端服务的接口,为下一步远程调用做准备。
远程调用:跨设备访问软件接口。
轻量消息:与轻量级设备通信方法。
状态迁移:保存/恢复 Ability 的运行状态。
3、分布式调用场景代码实现
分布式调度是为了降低开发分布式应用的难度,在接口的设计上尽量保持和访问本机软件相同,使用时就像使用本机软件接口一样,这样大大的降低了学习的成本。我们从下面的接口代码示例上看,除了增加了指定deviceId参数,其他与本地接口调用是一样的。
启动一个 Ability
代码语言:javascript复制Intent intent = new Intent();
ElementName name = new ElementName(deviceId, “packagename", “classname");
intent.setElement(name);
intent.setFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE);
startAbility(intent);
连接一个 Ability
代码语言:javascript复制ElementName name = new ElementName(deviceId, “packagenaeme", “classname");
intent.setElement(name);
intent.setFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE);
connectAbility(intent, conn);
4、分布式调度还可以用于哪些场景?
我们在实际的工作生活中,会遇到很多需要多个设备协同完成的场景。
无缝衔接的导航体验
一只手表的同程之旅
此外,用智慧屏看视频直播,通过手机进行弹幕互动;使用 PAD 查看手机上的邮件&附件,在手机上进行回复……这些都可以通过分布式调度完成。
我们可以发挥开发者无穷的想象力,开发出更多的 HarmonyOS 分布式应用,为用户带来更大的价值和更好的用户体验。