HarmonyOS:可分可合,自由流转
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18513969
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
3、跨端迁移:指将一个软件实体,从一台设备转移到另外一台设备上运行。可以理解为用户使用应用的情境发生变化时,例如从室内走到户外、从办公室到车上等。之前使用的设备,可能已经不适合继续当前的任务,或者周围有更合适的设备,此时可以选择使用新的设备来继续当前的任务。比如本例:在观完展之后在去公司的车上,用手机编辑备忘录写下观展心得,然后到办公室后,切换为2in1设备,继续完成稿件的复杂处理,如插入图片,编辑文本格式等。这个特性最直观的价值就是可以自由地在多个设备之间流转,为用户带来无缝的体验。也为开发者带来更多的入口和流量。
4、多端协同:多端协同涉及的情况有并发、协作、互补。
(1)、多端协同-并发:主要就是镜像相同的内容到不同的显示屏幕。这里有几种情况:一种是使用窗口方式占用屏幕的一部分内容。一种是自适应布局展示。还有一种是全屏复制展示。全屏复制展示的实例:手机上播放的视频投到智慧屏上继续播放,这个特性的价值是专业的设备做专业的事。将音频、视频投播到其他设备上。给用户带来更好的感官体验。
(2)、多端协同-协作:指运行在多个物理设备上的软件彼此协作完成一项任务,通过充分发挥每种设备的优势能力,比如智慧屏的显示能力,手机输入输出能力等。为用户提供更好的体验。剪切板使用非常频繁,将复制粘贴这个动作扩展到了多设备上。在一个设备上复制,可以直接在其他设备上粘贴,复用本机的人机交互,实现数据、文件的跨设备转移。
(3)、多端协同-互补:通过延展或者遥控来充分发挥每种设备的优势能力。如手机的拍照能力,手写板的输入能力等。如跨端拍照场景,用户在2in1设备中拍照不方便,可以在本端应用界面操作,唤醒手机设备的相机来拍摄所需的素材。拍摄的照片会快速地回传到2in1设备中,来帮助丰富自己的文档。
2、挑战2:基于传统操作系统开发跨设备交互的应用程序时,需要开发者自行解决设备发现、设备认证、设备连接、数据同步等技术难题,还要考虑不同的设备是否支持某些硬件能力,不但开发成本高,还存在安全隐私、兼容性、性能等诸多问题。
三、自由流转应用开发框架
3、分布式软总线技术架构:分布式软总线通过协议货架和软硬协同,屏蔽各种设备的协议差别,提供高吞吐、低时延、高可靠、安全可信的通信通道。克服无线通信不可靠、不稳定的挑战。为开发者提供接近本地化访问效果的通信能力。总线中枢模块负责解析命令完成设备间发现和连接,通过任务和数据两条总线,实现设备间文件传输、消息传输等功能。分布式软总线从逻辑架构上分为四大组成部分:(1)、发现:(2)、连接(3)、组网(4)、传输。四大模块,在整个软总线业务逻辑中分工合作,通过构筑分布式通信框架,达成多设备互联互通的目标。
4、分布式软总线核心技术:主要是自动发现和异构网络组网。
(1)、自动发现设备:是指实现用户零等待的自发现体验,可信设备自动发现无需等待,自动安全连接,无需任何用户操作。
(2)、异构网络组网:可以很好解决设备间不同协议如何交互的问题,蓝牙和Wi-Fi混合组网,自动构建一个逻辑全连接网络,解决设备间不同协议交互的问题。
5、分布式数据管理:解决跨端数据共享的问题。基于分布式软总线的能力,实现应用程序数据和用户数据的分布式管理。用户数据不再与单一的物理设备绑定,业务逻辑和数据存储分离,跨设备的数据处理如同本地数据处理一样方便快捷。让开发者能够轻松实现全场景多设备下的数据存储、共享和访问。
6、分布式数据管理:核心技术包括分布式数据库和分布式数据对象。根据跨设备同步数据生命周期的不同,可以分为持久数据生命周期比较长,需要保存到存储到数据库中,根据数据关系和特点,可以选择关系型数据库或者键值型数据库,临时数据生命周期比较短,通常保存在内存中,比如游戏应用产生的过程数据,建议使用分布式数据对象。
7、分布式硬件:解决跨端硬件共享问题。在传统操作系统中,设备之间互相独立,单设备虽然硬件外设资源丰富,但是归属于各个设备,应用层实现设备间硬件资源调用成本高,应用间能力难以复用。分布式硬件打破单一设备的硬件边界,能够将硬件设备化整为零,形成超级终端硬件资源池,供多个设备共享使用,真正达到软件定义硬件。设备间实现系统级融合并灵活按需适应不同场景的目的。对于开发者而言,只需要一套API实现本地和跨设备硬件查询调用。应用可以更加专注于业务创新,而无需关注底层细节。
8、分布式任务调度:基于分布式软总线、包管理、设备管理等技术特性。提供应用跨端迁移、多端协同的能力。分布式任务调度的核心能力包括:场景感知、迁移调度、协同调度、数据迁移。
(1)、场景感知:综合感知、空间、身份、设备等信息,为服务随人走提供决策基础。
(2)、迁移调度:提供跨设备迁移通知、原生迁移框架,帮助开发者快速开发迁移应用。
(3)、协同调度:提供跨设备拉起、绑定的主动能力,系统自行协同能力,管理协同关系,帮助开发者快速构建应用协同业务。
(4)、数据迁移:提供框架化的数据迁移传输接口,支持应用按需使用接口传输数据。
9、系统抽象和交互逻辑。
结合上述介绍的分布式应用开发框架设计的关键核心技术,进行简单的系统抽象。分布式软总线作为HarmonyOS系统的互联底座,提供快速发现、无感连接、稳定组网、极速传输这些关键技术。基于分布式软总线实现数据的分布式管理,让数据为多个设备共建共享。分布式硬件让硬件资源池化,完成多设备的硬件资源的共享,各个设备被分布式系统统一起来成为一个超级终端。上层应用只需简单的开发就能完成多设备的迁移和协同。
由此对于开发者而言,更关注自由流转具体的应用开发框架。
(1)、跨端迁移:开发者需要完成UIAbility、界面与对应的状态数据,包括UI界面、数据对象、文件等应用数据。从源端迁移到对端。
(2)、多端协同:开发者需要关注UIAbility间的异步消息通道,以及通过分布式共享对象去完成各个设备正在协同的UIAbility间的数据实时共享。
2、开发步骤一:为应用配置基础迁移能力。
(1)、首先需要为应用配置基础的迁移功能,在entry/src/main/module.json5配置文件中配置continuable标签,continuable : true表示支持迁移,false表示不支持,默认为false。配置为false,将被系统识别为无法迁移。
(2)、指定启动模式,跨端迁移为单实例模式与多实例模式提供了不同的迁移接口,因此需要为应用配置启动模式,如果需要使用单实例启动模式,将配置文件中的abilities下的launchType标签配置为singlenton,配置为单实例模式。冷启动场景使用onCreate实现,热启动场景使用onNewWant实现。
3、开发步骤二:应用动态运行时申请用户授权。
4、开发步骤三:实现简单的接口
5、编码效果展示:
双端设备都已经设置好了基本的前提条件,并安装好了案例应用。
接着打开手机端的应用,此时平板端Dock栏,即右下角应用出现了对应的接续图标。
再切换到平板设备,打开应用,会发现手机端应用退出。
6、分布式数据传输。
上面已经完成了迁移应用开发框架,下面介绍如何迁移。
应用迁移的开发关键是数据迁移,在进行应用迁移开发设计的时候,需要先分析业务数据模型,采用合适的数据同步能力,达到最佳的体验。应用数据主要包括:
(1)、页面数据:优先使用分布式任务调度迁移框架进行迁移。如:通过支持迁移的组件进行数据迁移,通过配置项设置进行页面栈迁移。
(2)、业务数据:根据业务数据模型采用合适的数据同步能力。如:通过want参数传递应用数据状态,通过分布式数据对象迁移内存数据,通过分布式文件迁移文件数据。以邮件流转案例进行分析:应用迁移状态适合使用want参数传输,收件人、发件人、主体和邮件内容,这些数据适合使用分布式数据对象,而邮件内容适合使用分布式文件来迁移。
7、对分布式数据迁移的场景逐一介绍。
(1)、场景一:使用组件迁移数据。这种场景适用于使用了支持自动迁移的组件。如:List、Grid、Scroll、WaterFlow,并且希望这个组件的数据能够在多设备间保持一致,具体的开发方式就是给自动迁移的组件设置restoreId。传入一个number类的数字,不同的组件需要配置不同的restoreId,这样就能完成自动迁移。
(2)、场景二:页面栈迁移。系统默认迁移页面栈,如果不希望迁移页面栈,可以设置为false,无论是否需要迁移页面栈,在对端端onCreate函数中,只要是迁移的场景就要主动触发页面恢复。
(3)、场景三:少量状态数据迁移。一般是小于100KB的状态数据,例如分布式邮件中有一个sessionId的数据,用于传输内存数据时使用,多个设备间的对象,设置为同一个sessionId才能自动同步数据。首先需要实现源端onContinue接口中保存迁移数据,开发者可以将要迁移的数据通过键值对的方式保存在want参数中,在对端onCreate端时候,判断是否迁移场景,如果是迁移,进行迁移数据恢复,这样就完成了少量状态数据的迁移。
(4)、场景四:内存数据迁移。这种场景适用于临时数据,生命周期较短,通常保存在内存数据中,可以封装成一个对象,使用分布式数据对象的方式进行迁移。
场景四-步骤1:创建分布式数据对象。在该场景中,需要在onWindowStageCreate的时候,创建一个分布式数据对象。
场景四-步骤2:向分布式数据对象写。在onContinue回调中设置sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId就能自动同步。然后将数据保存到分布式对象中。对象数据保存成功后,当应用存在时不会释放数据,当应用退出后重新进入应用时恢复,这里需要注意的是,数据保存完之后,必须要调用save触发对象同步。下图最后还有一个上文讲到的,通过want的参数传递sectionId的例子。
场景四-步骤3:从分布式数据对象读。在onCreate回调中,先拿到传递过来的sessionId,然后对分布式数据对象的变化进行监听,具体的changeCall函数实现可以参考本文最后的示例。然后与拿到的sessionId绑定,最后从分布式数据对象中恢复数据。
(5)、场景五:使用分布式文件传输数据。当进行应用继续开发时,传输的文件大小超过了100KB,这个时候就需要使用分布式文件系统来进行迁移。分布式文件系统为应用提供了跨设备文件访问的能力,多个设备安装了同一个应用时,通过基础文件接口,可跨设备读写其他设备该应用分布式文件路径下的文件。如:多设备流转场景,设备组网互联之后,源端的应用可访问对端同应用分布式路径下的文件,当期望应用文件被其他设备访问时,只需要将文件移动到分布式文件路径即可。
场景五-步骤1:向分布式写文件。在源端将文件数据写入分布式文件路径,写完后关闭文件流。
场景五-步骤2: 从分布式文件读。在对端端分布式文件路径下,读取对应的文件数据,读取完毕后关闭文件流。
8、总结:
源码下载:DistributedMail.zip