分布式能力为什么是鸿蒙的核心

传统移动开发假设应用只跑在一台手机上。鸿蒙从系统层把多台设备抽象成一个"超级终端":手机、平板、手表、车机彼此能发现、能连接、能接力。开发者不用自己处理网络发现与建连,系统已经把这些分布式细节封装好了。

你写的是一个应用,运行时却能像在一台虚拟设备上那样,跨多块屏幕协同工作。

这篇讲怎么发现设备、怎么把页面流转到另一台设备、以及其间的数据与安全问题。

发现附近的设备

协同的第一步是知道身边有哪些可用设备。鸿蒙提供设备发现能力,在同一分布式网络下枚举在线设备及其能力。你可以按设备类型(手机、平板)或能力(摄像头、屏幕)过滤,挑出真正合适的那一台。

import { deviceManager } from '@kit.DistributedServiceKit'

// 订阅设备上下线
deviceManager.on('deviceFound', (info) => {
  console.log('发现设备:' + info.deviceName)
})

发现只是列举,还没建立连接。把候选设备展示在"超级终端"式的面板里,让用户选择要协同到哪一台。

跨设备启动与连接

选定目标设备后,用跨设备启动能力把本应用的某个 Ability 拉到对方设备上运行。系统负责鉴权与通道建立,业务层只需指定要启动的页面和传递的参数。

跨设备协同三件事
  • 发现枚举附近可用设备与能力。
  • 连接系统建立安全通道,业务无感。
  • 启动在对端拉起指定 Ability 并传参。

参数要控制体积,大文件别直接塞,走分布式文件或数据通道单独传。

应用流转:在另一台设备接着用

流转比跨设备启动更进一步:把当前页面的状态一起带走。用户在手机上看到一半的文档,点一下"流转到平板",平板上打开同一个页面、停在同样的滚动位置,像没离开过一样。

要支持流转,需让页面实现状态保存与恢复:流转发生时把关键数据序列化,对端重建时读回来。系统负责传输,你负责"存什么、怎么恢复"。

分布式数据与任务调度

多设备协同不只是"换个屏幕",还包括数据与算力的协同。分布式数据管理能让同账号下多台设备的数据自动一致(呼应数据持久化那篇);分布式任务调度则可以把一个计算任务派给更合适的设备,比如用平板的大屏渲染、用手表做提醒。

鸿蒙多设备协同示意:手机、平板、手表三台抽象设备之间以发光电路板线条双向连接,右上有一朵云
超级终端:多台设备被抽象成协同整体,数据与任务在其间流动。

设计时想清楚:哪些数据要跨端同步,哪些只是本地临时态,别把所有状态都搬到分布式数据库里。