许多应用都需要在后台传输数据。本指南概述了可靠的后台数据传输选项,并提供了实现方法示例。
常见的后台数据传输场景
本部分介绍了应用需要向设备传输或从设备传输数据的一些常见情况,并可帮助您根据具体情况选择合适的工具。
在 API 之间进行选择时,您应考虑以下问题:
- 转移是用户发起的吗?
- 是否有现有 API 可处理此转移?
- 工作是否需要立即运行?
选项 | 适用情形 | 计时 | 示例 |
---|---|---|---|
用于安排时长短于 10 分钟的任务,这些任务应在应用不可见时执行。 |
可推迟:还可以通过约束条件进行调整 立即执行:如果工作需要立即运行,请使用
|
定期将数据与服务器同步 在联网状态下下载或上传媒体 后台发起(非用户发起) |
|
当数据传输由用户触发时,您需要让用户了解传输进度。 |
由用户发起(例如按钮点击)- 立即开始 |
上传照片、下载文件 |
|
对于短时关键任务,或者无法使用 WorkManager 时。系统会通过通知告知用户传输进度。 |
立即开始 |
|
|
如果特定操作有此参数,则使用此参数。可带来诸多好处,例如优化性能和改进系统集成。 |
会变 |
与已连接的设备同步数据 |
如果您的场景未在常见场景下列出,请参阅以下部分,找到最适合您的用例的 API。WorkManager 可能很适合。
使用用户发起的数据传输作业类型
如果您的应用需要将数据传输到远程服务器,您可能需要使用由用户发起的数据传输作业。如果满足以下条件,则此作业类型适合:
- 用户开始了数据传输
- 您需要持续通知用户数据传输进度
- 如果系统中断传输,将会对用户体验产生不利影响
如果不满足上述任一条件,您应改用 WorkManager。
例如,媒体应用可能会允许用户下载专辑以在本地播放。如果用户想下载播放列表并立即播放,您可能需要使用由用户发起的数据传输作业类型。另一方面,如果用户希望下载的播放列表在后台定期更新,而无需用户发起,则 WorkManager 是更好的选择。
如需了解详情(包括如何创建和运行由用户发起的数据传输作业),请参阅有关由用户发起的数据传输作业的文档。
使用 WorkManager 进行数据传输
在大多数情况下,如果您需要调度工作,WorkManager 是最佳选择。请注意,您必须以可被系统中断或推迟的方式设计任务。如需了解详情,请参阅 WorkManager 文档。
在使用 WorkManager 进行后台数据传输时,请注意以下事项:
- 如果您需要尽快运行工作,可以安排加速工作请求。如果您要安排作业以响应广播、精确闹钟或高优先级 FCM 消息,此选项尤为有用。
- 如果您需要定期运行作业,可以安排定期作业。借助定期工作请求,您可以大致指定工作将运行的频率,但无法保证特定时间。这样,系统就可以调度来自不同应用的工作请求,以平衡设备上的请求。
- 您应定义工作约束条件,以指定运行作业的正确情形。例如,如果您的应用需要下载非紧急资源,您可以指定在设备充电且连接到不按流量计费的网络时运行作业。然后,WorkManager 可以在平衡系统负载的时间运行作业。
- WorkManager 可以根据需要取消和重试作业。例如,用户可能会在作业运行时关闭设备;然后,当设备再次可用时,系统可以重试作业。请务必设计和测试您的工作流,确保取消和重试周期正常运行。
- 长时间运行(前台服务)worker: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,通常比使用前台服务更好。
使用新的媒体处理前台服务
如果您需要处理媒体数据,可以使用 mediaProcessing
前台服务。如果您的应用以 Android 15 或更高版本为目标平台,则可以使用此服务类型。例如,如果您的应用需要将媒体从一种格式转码为另一种格式以进行播放,则此服务类型非常适合。如需了解详情,请参阅媒体处理前台服务文档。