一、功能简介

本篇讲解如何在 HarmonyOS 中使用**分布式任务迁移(Continuation)**实现应用从一个设备无缝切换至另一个设备继续运行,适用于文档接力编辑、视频跨屏播放、扫码登录等多设备协同场景。


二、核心能力模块

✅ 模块说明
  • @ohos.continuationRegisterManager:任务注册与迁移管理器

  • @ohos.continuationManager:控制迁移行为

  • 仅支持 Stage 模型 + 真机 + API 10+ + 多设备同账号登录


三、页面结构

entry/src/main/ets/pages/ContinuationDemo.ets

四、代码演示

import continuationRegisterManager from '@ohos.continuationRegisterManager'
import continuationManager from '@ohos.continuationManager'

@Entry
@Component
struct ContinuationDemo {
  @State content: string = ''
  @State deviceId: string = ''
  private token: number = -1

  async registerAbility() {
    try {
      this.token = await continuationRegisterManager.register({
        onConnect: () => {
          prompt.showToast({ message: '设备连接成功' })
        },
        onDisconnect: () => {
          prompt.showToast({ message: '设备已断开' })
        },
        onCompleteContinuation: () => {
          prompt.showToast({ message: '接续完成' })
        },
        onFail: (code: number) => {
          prompt.showToast({ message: '接续失败,错误码:' + code })
        },
        onSaveData: () => {
          // 接力数据写入
          return { content: this.content }
        },
        onRestoreData: (data: Record<string, any>) => {
          // 接收接力数据
          this.content = data.content ?? ''
        }
      })
    } catch (err) {
      prompt.showToast({ message: '注册失败' })
    }
  }

  async startContinuation() {
    try {
      const result = await continuationManager.startContinuation(this.token)
      if (!result) {
        prompt.showToast({ message: '未找到可接续设备' })
      }
    } catch (err) {
      prompt.showToast({ message: '启动接续失败' })
    }
  }

  build() {
    Column() {
      Text('分布式任务迁移演示')
        .fontSize(20)
        .margin({ bottom: 12 })

      TextArea({
        text: this.content,
        onChange: val => this.content = val
      })
        .placeholder('输入内容后点击接续,即可迁移到其他设备继续编辑')
        .height(140)
        .padding(10)
        .borderRadius(8)
        .backgroundColor('#f7f7f7')
        .fontSize(16)
        .margin({ bottom: 12 })

      Row() {
        Button('注册接续')
          .onClick(() => this.registerAbility())
        Button('启动接续')
          .type(ButtonType.Outline)
          .onClick(() => this.startContinuation())
      }
      .space(16)
    }
    .width('100%')
    .padding(20)
  }
}

五、运行效果

  1. 设备 A 输入文本 → 点击【注册接续】;

  2. 点击【启动接续】 → 出现附近设备列表;

  3. 选择设备 B → 自动在设备 B 启动并恢复内容;

  4. 支持跨设备「一键接续」体验。


六、常见易错点与解决方法

易错点 表现 原因 解决方法
注册失败 无法迁移 未配置 token 或调用失败 使用 register() 后保存返回的 token
找不到设备 接续失败 多设备未登录同账号或关闭协同 保证同一华为帐号、协同开启、网络正常
数据未恢复 页面空白 onRestoreData 未设置内容 使用 data.content ?? '' 恢复状态
onSaveData 报错 数据未携带 返回格式不符 返回对象必须为 key-value 字典 {}

七、拓展建议

  • 可实现接续前数据加密与校验;

  • 搭配 distributedKVStore 实现“接续+同步”全闭环;

  • 使用 DeviceManager 显式控制目标设备接续。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐