首页 经验

诗词速通,漫游泡泡,词汇宝,新维日语,简易物理,点此下载


协同和接续

时间: 2026-04-11 16:58:46

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)

两段代码的核心区别


维度第一段(迁移场景)第二段(协同场景)
触发方式系统自动触发(应用接续)主动调用 startAbilityByCall()
使用场景应用跨设备迁移(如文档编辑接续)多设备协同(如遥控器控制电视)
数据传递通过 wantParam 传递 sessionId通过 startAbilityByCall 传递 sessionId
关键APIonContinue() + save()startAbilityByCall() + Caller
数据恢复监听 'restored' 状态监听 'change' 事件
文件迁移✅ 支持 Asset 文件迁移❌ 不支持文件,只传数据
Ability 启动系统自动拉起目标 Ability手动调用拉起




详细对比


1. 使用场景不同


第一段:跨设备迁移(Migration)

- 用户点击“应用接续”按钮,或系统触发迁移

- 典型场景:手机正在写文档,平板上继续编辑

- 数据会持久化保存,应用退出后重启仍能恢复


第二段:多设备协同(Collaboration)

- 应用主动调用 startAbilityByCall 拉起远端 Ability

- 典型场景:手机作为遥控器控制电视上的应用

- 数据不持久化,断开连接后数据丢失


2. 数据传递机制不同


第一段(迁移):

// 源设备:sessionId 通过 wantParam 传递
wantParam.distributedSessionId = sessionId;
dataObject.save(deviceId);  // 主动保存到目标设备

// 目标设备:从 want.parameters 取出 let sessionId = want.parameters.distributedSessionId; dataObject.setSessionId(sessionId);


第二段(协同):

// 主设备:sessionId 通过 want 传递
want.parameters.distributedSessionId = sessionId;
context.startAbilityByCall(want);

// 被调用设备:从 want.parameters 取出 let sessionId = want.parameters.distributedSessionId; dataObject.setSessionId(sessionId);


3. 状态监听不同


第一段(迁移):

// 监听 'restored' 状态(数据恢复完成)
dataObject.on('status', (sessionId, networkId, status) => {
  if (status == 'restored') {
    // 数据已从源设备迁移过来
  }
});


第二段(协同):

// 监听 'change' 事件(数据实时变化)
dataObject.on('change', (sessionId, fields) => {
  fields.forEach(field => {
    console.log(${field}: ${dataObject[field]});
  });
});


4. 文件支持不同


第一段(迁移):

- ✅ 支持 Asset 文件迁移(图片、文档等)

- 文件需要放在 distributedFilesDir 目录

- 文件会随数据一起传输到目标设备


第二段(协同):

- ❌ 不支持文件迁移

- 只传输结构化数据(字符串、数字等)


5. Ability 生命周期要求不同


第一段(迁移):

// module.json5 必须设置
{
  "abilities": [{
    "continuable": true  // 必须开启
  }]
}


第二段(协同):

// module.json5 必须设置
{
  "abilities": [{
    "launchType": "singleton"  // 必须是单实例
  }]
}




你的场景应该用哪个?


根据你之前的描述(任意页面实时同步数据),你需要的不是迁移,也不是协同,而是:


纯粹的分布式数据同步 → 用 KVStore


因为你不需要:

- 跨设备拉起 Ability

- 应用接续的生命周期管理

- 文件迁移


你只需要:

- 两台设备同时打开 App

- 实时同步文本数据


KVStore 最适合你,它不需要 onContinue、不需要 startAbilityByCall,只要设备组网成功,数据自动同步。


还有问题,向AI提问。


上一个 数据同步(Data Sync) 文章列表 下一个 Claude Fast Mode Cost Explanation

(汉语/英语/日语/法语/德语)语音助手(识别/合成),智能翻译,高中物理动画,数据分析,数据可视化,电话: 18201798243(同v)

© 2019-至今 适观科技

沪ICP备17002269号