许多应用都需要在后台传输数据。此页面可帮助您找到适合您需求的方法。
迁移用例
本部分介绍了应用需要向设备传输数据或从设备传输数据的常见情况,并帮助您为您的情况选择合适的工具。
- 通过网络传输数据
如果传输是由用户启动的,并且您需要让用户了解传输进度,请使用用户启动的数据传输 API。否则,请使用 WorkManager 或适当的前台服务类型。
如果您需要调度下载,您还可以使用
DownloadManager
。DownloadManager
管理应用的生命周期,并在失败、设备重启和连接变化后处理下载重试。但是,DownloadManager
没有提供WorkManager
和JobScheduler
中可用的所有调试和测试功能。- 向本地设备传输数据或从本地设备传输数据
如果可用,请使用特定的 API(例如配套设备管理器);否则,请使用
connectedDevice
前台服务。- 媒体转码
- 完成一个简短的关键任务
- 处理文件(例如,向 SD 卡传输数据或从 SD 卡传输数据、调整内容大小或加密或解密数据)
如果任务可以在三分钟内完成,请使用
shortService
前台服务。否则,请使用 WorkManager。
使用用户启动的数据传输 API
如果您的应用需要将数据传输到远程服务器,您可能需要使用新的用户启动的数据传输 API。如果满足以下条件,则这些 API 是合适的
- 用户启动了数据传输
- 您需要让用户了解数据传输进度
- 如果系统中断传输,则会对用户体验造成损害
如果不满足这些条件中的任何一个,则应改用 WorkManager。
例如,媒体应用可以让用户下载专辑以在本地播放。如果用户想要下载播放列表并立即播放,您可能需要使用用户启动的数据传输 API。另一方面,如果用户希望下载的播放列表在后台定期更新而无需用户启动,则 WorkManager 将是更好的选择。
有关详细信息,请参阅有关将前台服务迁移到用户启动的数据传输作业的文档。
使用 WorkManager
在大多数情况下,当您需要调度工作时,WorkManager 是最佳选择。您必须以系统可以中断或推迟任务的方式来设计任务。有关详细信息,请参阅WorkManager 文档。
以下是一些在您将前台服务迁移到 WorkManager 时可能有所帮助的说明
- 如果您需要尽快运行任务,您可以安排加急工作请求。如果您是在响应广播、精确闹钟或高优先级 FCM 消息时安排工作,此选项尤其有用。
- 如果您需要定期运行任务,您可以安排周期性工作。周期性工作请求允许您大致指定工作的运行频率,但不保证具体的运行时间。这允许系统调度来自不同应用的工作请求,以平衡设备上的负载。
- 您应该定义工作约束以指定运行作业的正确条件。例如,如果您的应用需要下载非紧急资源,您可以指定作业应在设备充电并连接到非计量网络时运行。然后,WorkManager 可以在平衡系统负载的时间运行您的作业。
- WorkManager 可以根据需要自由取消和重试作业。例如,用户可能在作业运行时关闭设备;然后系统可以在设备再次可用时重试作业。请确保您设计并测试您的工作流程,以确保取消和重试循环正常工作。
使用更具体的Foreground Service类型
如果您无法切换到其他执行后台工作的方法,您可能仍然需要使用前台服务。在这种情况下,您应该找到一个合适的服务类型来代替dataSync
。由于您的代码已经在使用前台服务,因此此迁移非常简单;您只需要选择合适的前台服务类型,并确保您的应用满足该服务的各项要求。
与以往一样,当您考虑使用前台服务时,您应该考虑是否有更适合您的用例的替代 API。
使用短时前台服务 (shortService)
如果您的应用需要执行一个简短的关键任务,shortService
前台服务可能是最佳选择。以下是一些可能适合使用shortService
前台服务的情况:
- 用户启动操作(例如将数据同步到服务器),并且您希望确保即使用户立即将应用发送到后台,操作也能完成。
- 将内存中的信息保存到持久性存储区。
- 加密或解密信息。
有关完整信息,请参阅shortService
文档。
使用连接设备前台服务
如果您需要将数据传输到另一个本地设备,您可能需要使用connectedDevice
前台服务。以下是一些您可能需要执行此操作的常见情况:
- 与蓝牙配件(如耳机或智能手表)通信
- 通过 USB 连接、NFC 或本地互联网连接将数据传输到本地连接的设备
但是,在这些情况下,您可以使用配套设备管理器连接到设备,而不是使用前台服务。与以往一样,如果针对您的用例提供了专用 API,则通常比使用前台服务更好。
使用新的媒体处理前台服务
如果您需要处理媒体数据,可以使用新的mediaProcessing
前台服务。如果您的应用的目标是 Android 15 或更高版本,则此服务类型可用。例如,如果您的应用需要将媒体从一种格式转码为另一种格式以进行播放,则此服务类型适用。有关更多信息,请参阅媒体处理前台服务文档。
其他资源
有关此前台服务更改的更多信息,请参阅以下其他资源: