HarmonyOS鸿蒙Next中分布式软总线在设备离线后如何处理未完成的任务?是否有重试或队列机制?

HarmonyOS鸿蒙Next中分布式软总线在设备离线后如何处理未完成的任务?是否有重试或队列机制? 发起一个“将文件发送到平板”的操作,但平板突然关机。鸿蒙会自动重试吗?还是任务就丢失了?有没有 API 可以监听传输状态并实现自定义恢复逻辑?

5 回复

软总线本身是尽力而为的,保证传输可靠性但不保证传输稳定性,至于监听传输状态就直接监听对应的操作接口即可

比如如果你是通过Distributed Service Kit连接的设备,可以监听 on(type: ‘deviceStateChange’, callback: Callback<{ action: DeviceStateChange; device: DeviceBasicInfo; }>): void; 来关注设备上下线通知;

如果是通过分布式文件系统进行沙箱拷贝的,直接 catch fileIo 的异常即可,并且 dfs 本身也有 listener 可以注册上下线监听,可以参考 [@ohos.file.fs (文件管理)-ArkTS API-Core File Kit(文件基础服务)-应用框架 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-file-fs#fsconnectdfs12)

import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { distributedDeviceManager } from '@kit.DistributedServiceKit';
let dmInstance = distributedDeviceManager.createDeviceManager("com.example.filesync");
let deviceInfoList: Array<distributedDeviceManager.DeviceBasicInfo> = dmInstance.getAvailableDeviceListSync();
if (deviceInfoList && deviceInfoList.length > 0) {
  console.info(`Success to get available device list`);
  let networkId = deviceInfoList[0].networkId;
  let listeners: fs.DfsListeners = {
    onStatus(networkId, status) {
      console.info('onStatus');
    }
  };
  fs.connectDfs(networkId, listeners).then(() => {
    console.info("Success to connectDfs");
  }).catch((err: BusinessError) => {
    console.error(`Failed to connectDfs. Code: ${err.code}, message: ${err.message}`);
  });
}

更多关于HarmonyOS鸿蒙Next中分布式软总线在设备离线后如何处理未完成的任务?是否有重试或队列机制?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


分布式软总线不提供内置的持久化任务队列或自动重试。其设计原则是“尽力而为”的实时通信。但开发者可通过以下方式实现可靠传输:

  • 使用 DistributedDataManagersync 模式,它会在设备重新上线后自动同步增量变更;
  • 对于文件传输,先写入本地临时目录,再通过 FileSession 发起传输,并监听 onSendFileStateChange
  • 若失败,将任务 ID 和元数据存入 RelationalStore,在 DeviceManager.on('deviceOnline') 回调中触发重试

你看看这个会不会对你有帮助:Distributed Service Kit(分布式管理服务)

鸿蒙Next分布式软总线在设备离线时,未完成的任务会通过本地队列暂存。系统内置重试机制,在检测到网络恢复或设备重新上线后,自动重新调度和执行这些任务。任务状态由分布式任务管理器维护,确保数据一致性。

在HarmonyOS Next中,分布式软总线针对设备离线导致的未完成任务,设计了完整的可靠性保障机制,并非简单丢弃任务。

核心处理机制如下:

  1. 任务队列与状态管理:分布式任务(如文件传输)在发起后,系统会为其建立管理上下文并维护状态。当检测到对端设备异常离线时,当前传输任务会被暂停,其状态和上下文信息会被系统保留,而非立即清除。

  2. 自动重连与恢复尝试:当离线设备重新上线并恢复网络连接时,分布式软总线会尝试自动重建数据通道。对于系统标准服务(如跨设备文件管理器的文件传输),在通道恢复后,系统通常会自动尝试恢复之前被中断的任务。这意味着,在平板关机重启后,如果原应用仍在运行且传输会话有效,文件传输有很大概率会自动继续。

  3. 应用层自定义控制:对于开发者需要更精细控制的场景,HarmonyOS提供了相应的API来监听和管理传输状态。

    • 状态监听:您可以通过分布式任务相关的回调接口(例如 DataShare 或特定分布式服务接口的状态回调)来监听任务的中断、恢复等状态变化。
    • 自定义逻辑:基于状态回调,您可以实现自定义的重试、暂停或恢复逻辑。例如,在检测到任务因设备离线失败后,您可以将其加入应用自身的持久化队列,待设备上线后,再由应用逻辑判断并重新发起任务。

总结与建议

  • 系统层面:有基本的任务保持和自动恢复机制,旨在提供无缝的用户体验。
  • 开发层面:如需确保关键业务任务的绝对可靠性(如订单同步、重要文档传输),建议利用HarmonyOS提供的状态监听API,在应用层实现包含持久化队列、重试策略和状态检查的增强型可靠性逻辑。这能更好地处理复杂网络波动、应用重启等场景。

您可以查阅HarmonyOS官方文档中关于“分布式任务调度”、“数据共享”或具体使用的分布式服务(如“分布式文件服务”)的详细说明,以获取对应场景的精确API接口。

回到顶部