后台处理指南

为了创建既能迅速响应用户、又能遵守 Android 平台政策规定的 Android 应用,在后台处理数据是重要的一环。本指南定义了后台任务类别、提供了任务分类标准,并推荐了执行任务所应使用的 API。

指导原则

一般来说,运行时间超过几毫秒的所有任务都应委派给台线程。长时间运行的常见任务包括解码位图、访问存储空间、处理机器学习 (ML) 模型、执行网络请求等。

后台任务的类别

后台任务分为以下几个主要类别:

  • 即时任务
  • 延期任务
  • 精确任务

如需对任务进行分类,请回答以下问题,并遍历图 1 中的相应决策树:

任务是否需要在用户与应用进行互动时完成?
如果是,则应将此任务归类为即时任务。 如果不是,请继续回答第二个问题。
任务是否需要在精确的时间点运行?
如果您确实需要在精确的时间点运行任务,则应将任务归类为精确任务。

大多数任务不需要在精确的时间点运行。通常,任务允许运行的时间点存在细微差异,具体取决于网络可用性和剩余电量等条件。无需在精确时间点运行的任务应归类为延期任务。

此决策树可帮助您确定哪个类别最适合您的后台任务
图 1. 此决策树可帮助您确定哪个类别最适合您的后台任务。

下面几部分将介绍针对各个后台任务类型的推荐解决方案。

对于应在用户离开特定作用域或完成某项互动时结束的任务,我们建议使用 Kotlin 协程。许多 Android KTX 库都包含适用于常见应用组件(如 ViewModel)和常见应用生命周期的现成可用的协程作用域。

如果您是 Java 编程语言用户,请参阅 Android 上的线程处理,了解推荐的选项。

对于应立即执行并需要继续处理的任务,即使用户将应用放在后台运行或重启设备,我们也建议使用 WorkManager 并利用其对长时间运行的任务的支持。

在特定情况下(例如使用媒体播放或主动导航功能时),您可能希望直接使用前台服务

延期任务

凡是不直接与用户互动相关且日后可随时运行的任务,都可以延期执行。建议为延期任务使用 WorkManager 解决方案。

如果您希望某些可延期异步任务即使在应用退出或设备重启后仍能正常运行,使用 WorkManager 可以轻松地调度这些任务。如需了解如何调度这些类型的任务,请参阅 WorkManager 相关文档。

精确任务

需要在精确时间点执行的任务可以使用 AlarmManager

如需详细了解 AlarmManager,请参阅设置重复闹铃时间