数据传输后台任务选项

许多应用需要在后台传输数据。本指南概述了可靠后台数据传输的选项,并提供了如何实现的示例。

常见的后台数据传输场景

本部分描述了应用需要向设备传输数据或从设备传输数据的一些常见情况,并帮助您为您的场景选择合适的工具。

在选择 API 时,您应该考虑以下问题

  • 传输是否由用户发起?
  • 是否有现有的 API 处理此传输?
  • 工作是否需要立即运行?
选项 何时使用 时机 示例

WorkManager

适用于调度时长小于 10 分钟且应在应用不可见时执行的任务。

可延期:也可以通过约束进行调整

立即:如果工作需要立即运行,请使用 setExpedited

定期与服务器同步数据

在网络连接时下载或上传媒体(后台发起,非用户发起)

用户发起的数据传输作业

当数据传输由用户触发并且您需要让用户了解传输进度时。

由用户发起(例如点击按钮)- 立即开始

上传照片、下载文件

前台服务

适用于简短、关键任务,或当 WorkManager 不适用时。通知会告知用户传输进度。

立即开始

connectedDevice:与连接设备同步数据

shortService:3 分钟以内的文件处理

mediaProcessing:编码或解码媒体文件

特定 API

如果存在针对特定操作的 API,则使用该 API。可以带来优化性能和改进系统集成等好处。

可变

与连接设备同步数据

如果您的场景未列在常见场景下,请查阅以下部分,为您的用例找到最合适的 API。很可能 WorkManager 将是合适的。

使用用户发起的数据传输作业类型

如果您的应用需要将数据传输到远程服务器,您可能需要使用用户发起的数据传输作业。如果满足以下条件,此作业类型是合适的:

  • 用户发起了数据传输
  • 您需要让用户了解数据传输进度
  • 如果系统中断传输,将对用户体验造成不利影响

如果以上任何条件不满足,您应该使用 WorkManager

例如,媒体应用可能允许用户下载专辑到本地播放。如果用户想要下载播放列表并立即播放,您可能需要使用用户发起的数据传输作业类型。另一方面,如果用户希望下载的播放列表在后台定期更新而无需用户发起,那么 WorkManager 将是更好的选择。

有关更多信息,包括如何创建和运行用户发起的数据传输作业,请参阅关于用户发起的数据传输作业的文档。

使用 WorkManager 进行数据传输

在大多数情况下,当您需要调度工作时,WorkManager 是最佳选择。请记住,您必须以系统可以中断或延迟任务的方式设计任务。有关更多信息,请参阅 WorkManager 文档

以下是您在使用 WorkManager 进行后台数据传输时需要记住的几点:

  • 如果您需要尽快运行工作,可以调度加速工作请求。如果您的工作是响应广播、精确闹钟或高优先级 FCM 消息而调度的,此选项特别有用。
  • 如果您需要工作定期运行,可以调度周期性工作。周期性工作请求允许您大致指定工作的运行频率,但不保证具体时间。这允许系统调度来自不同应用的工作请求,以平衡设备上的需求。
  • 您应该定义工作约束以指定运行作业的正确情况。例如,如果您的应用需要下载非紧急资源,您可以指定作业应在设备充电并连接到非计量网络时运行。WorkManager 可以在平衡系统负载的时间运行您的作业。
  • WorkManager 可以在必要时自由取消和重试作业。例如,用户可能会在作业运行时关闭设备;系统可以在设备再次可用时重试作业。请确保您设计并测试您的工作流,以确保取消和重试循环正常工作。
  • 长时间运行(前台服务)工作器:WorkManager 可以通过为您的应用创建前台服务来支持超过 10 分钟的工作。这意味着它受与前台服务和作业相同的限制,包括从后台启动的限制和执行限制(超过 10 分钟的作业将由系统重新调度)。

JobScheduler 是调度后台工作的另一种选择。与 WorkManager 相比,它需要您进行更多配置,但优点是您可以访问 WorkManager 中目前不可用的 API,例如 setPrefetchsetUserInitiatedgetPendingJobReasons

使用特定 API

如果存在特定 API(例如配套设备管理器),则使用该 API;否则,使用 connectedDevice 前台服务

识别用例特定 API

此提示要求针对数据传输任务提供特定 API。


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

使用 AI 提示

AI 提示旨在与 Android Studio 中的 Gemini(需要最新的 Canary 版本)一起使用

在此处了解有关 Studio 中 Gemini 的更多信息:https://developer.android.com/studio/preview/gemini

使用更具体的前台服务类型

如果 WorkManager 和 JobScheduler 不适用于特定的后台任务,您可能需要使用前台服务。

一如既往,当您考虑使用前台服务时,您应该考虑是否有更适合您的用例的替代 API

使用短时服务前台服务

如果您的应用需要执行一项简短的关键任务,shortService 前台服务可能是最佳选择。以下是一些 shortService 前台服务可能适用的情况:

  • 用户发起一项操作(例如将数据同步到服务器),并且您希望确保即使用户立即将应用发送到后台,操作也能完成。
  • 将内存中的信息保存到持久存储。
  • 加密或解密信息。

如需完整信息,请参阅 shortService 文档

使用连接设备前台服务

如果您需要将数据传输到另一台本地设备,您可能需要使用 connectedDevice 前台服务。以下是一些您可能需要这样做的常见情况:

  • 与蓝牙配件通信,如耳机或智能手表
  • 通过 USB 连接、NFC 或本地互联网连接将数据传输到本地连接的设备

然而,在这些情况下,您可能可以使用配套设备管理器来连接设备,而不是使用前台服务。一如既往,如果您的用例有专用 API 可用,那通常是比使用前台服务更好的选择。

使用新的媒体处理前台服务

如果您需要处理媒体数据,可以使用 mediaProcessing 前台服务。如果您的应用目标为 Android 15 或更高版本,则此服务类型可用。例如,如果您的应用需要将媒体从一种格式转码为另一种格式进行播放,则此服务类型是合适的。有关更多信息,请参阅媒体处理前台服务文档

其他资源