Many apps need to transfer data in the background. This guide outlines choices for reliable background data transfer, and provides examples for how to implement them.
常见的后台数据传输场景
本部分介绍了一些常见情况,在这些情况下,应用需要将数据传输到设备或从设备传输数据,并帮助您根据自己的情况选择合适的工具。
在选择 API 时,您应考虑以下问题:
- 转移是否由用户发起?
- 是否有现有的 API 可以处理此转移?
- 工作是否需要立即运行?
选项 | 适用情形 | 时间安排 | 示例 |
---|---|---|---|
用于安排时长不到 10 分钟的任务,这些任务应在应用不可见时执行。 |
可延期:也可以通过限制条件进行调整 立即执行:如果工作需要立即运行,请使用
|
定期将数据与服务器同步 在网络上下载或上传媒体后台启动(非用户启动) |
|
当数据转移由用户触发,并且您需要让用户了解转移进度时。 |
由用户发起(即点击按钮)- 立即开始 |
上传照片、下载文件 |
|
对于简短的关键任务,或者当 WorkManager 不是一种选择时。通知会告知用户转移的进度。 |
立即开始 |
|
|
如果存在,则使用。可带来诸多好处, 例如优化性能和改进系统集成。 |
会变 |
与关联的设备同步数据 |
如果您的使用场景未列在常见使用场景下,请参阅以下部分,找到最适合您使用场景的 API。WorkManager 可能比较适合。
使用用户发起的数据传输作业类型
如果您的应用需要将数据传输到远程服务器,您可能需要使用由用户发起的数据传输作业。如果满足以下条件,则适合使用此作业类型:
- 用户开始转移数据
- 您需要及时向用户通知数据转移进度
- 如果系统中断转移,会严重影响用户体验
如果不满足上述任一条件,您应改用 WorkManager。
例如,媒体应用可能允许用户下载专辑以在本地播放。如果用户想要下载播放列表并立即播放,您可能需要使用由用户发起的数据传输作业类型。另一方面,如果用户希望下载的播放列表在后台定期更新,而无需用户发起,那么 WorkManager 会是更好的选择。
如需了解详情,包括如何创建和运行用户发起的数据传输作业,请参阅有关用户发起的数据传输作业的文档。
使用 WorkManager 进行数据传输
在大多数情况下,当您需要安排工作时,WorkManager 是最佳选择。 请注意,您必须以系统可以中断或延迟的方式设计任务。如需了解详情,请参阅 WorkManager 文档。
在将 WorkManager 用于后台数据传输时,您需要注意以下几点:
- 如果您需要尽快运行工作,可以安排加急工作请求。如果您要安排工作来响应广播、精确闹钟或高优先级 FCM 消息,此选项尤其有用。
- 如果您需要定期运行工作,可以安排定期工作。通过周期性工作请求,您可以指定工作的大致运行频率,但无法保证具体时间。这样,系统就可以安排来自不同应用的工作请求,以平衡设备上的需求。
- 您应定义工作约束条件,以指定运行作业的合适环境。例如,如果您的应用需要下载非紧急资源,您可以指定该作业应在设备充电且连接到不按流量计费的网络时运行。然后,WorkManager 可以在平衡系统负载的时间运行作业。
- WorkManager 可以根据需要取消并重试作业。例如,用户可能会在作业运行时关闭设备;当设备再次可用时,系统可以重试该作业。请务必设计并测试工作流,确保取消和重试周期正常运行。
- 长时间运行(前台服务)的工作器:WorkManager 可以通过为应用创建前台服务来支持耗时超过 10 分钟的工作。这意味着它与前台服务和作业一样,会受到相同的限制,包括从后台启动的限制和执行限制(耗时超过 10 分钟的作业将由系统重新调度)。
JobScheduler 是用于安排后台工作的替代选项。与 WorkManager 相比,它需要您进行更多配置,但优势在于,您可以访问 WorkManager 目前不提供的 API,例如 setPrefetch
、setUserInitiated
和 getPendingJobReasons
。
使用特定 API
如果存在特定 API(例如配套设备管理器),请使用该 API;否则,请connectedDevice
使用前台服务。
AI 提示
确定特定用例的 API
此提示要求提供用于数据传输任务的特定 API。
I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?
使用更具体的前台服务类型
如果 WorkManager 和 JobScheduler 不适合特定的后台任务,您可能需要使用前台服务。
与往常一样,在考虑使用前台服务时,您应考虑是否有更适合您的使用情形的替代 API。
使用短时前台服务
如果您的应用需要执行简短的关键任务,那么 shortService
前台服务可能是最佳选择。在以下情况下,shortService
前台服务可能比较适合:
- 用户发起某项操作(例如将数据同步到服务器),您希望确保即使在用户立即将应用发送到后台的情况下,该操作也能完成。
- 将内存中的信息保存到持久性存储空间。
- 加密或解密信息。
如需了解完整信息,请参阅 shortService
文档。
使用关联设备前台服务
如果您需要将数据传输到另一台本地设备,不妨使用 connectedDevice
前台服务。以下是一些常见情况,您可能需要执行此操作:
- 与蓝牙配件(例如耳机或智能手表)通信
- 通过 USB 连接、NFC 或本地互联网连接将数据传输到本地连接的设备
不过,在这些情况下,您或许可以使用配套设备管理器来与设备连接,而不是使用前台服务。 与往常一样,如果您的使用情形有专用 API 可用,那么通常情况下,使用专用 API 比使用前台服务更好。
使用新的媒体处理前台服务
如果您需要处理媒体数据,可以使用 mediaProcessing
前台服务。如果您的应用以 Android 15 或更高版本为目标平台,则可以使用此服务类型。例如,如果您的应用需要将媒体从一种格式转码为另一种格式以进行播放,则适合使用此服务类型。如需了解详情,请参阅媒体处理前台服务文档。