返回

用 WorkManager 处理需要立刻执行的后台任务

Android

WorkManager是什么

WorkManager 是一个用于管理和调度后台工作的库,它可以确保在设备空闲时执行这些任务。这可以帮助您避免后台执行限制,并提高应用程序的性能和电池寿命。WorkManager 是 AndroidX 库的一部分,它是 Android Jetpack 的一部分,您可以使用 Android Studio 或 Maven 添加到您的项目中。

如何使用WorkManager

要使用 WorkManager,您需要创建一个 WorkRequest 对象来您的工作。WorkRequest 可以是 OneTimeWorkRequest 或 RepeatingWorkRequest。OneTimeWorkRequest 表示只执行一次的工作,而 RepeatingWorkRequest 表示周期性执行的工作。

您可以使用 WorkManager API 将您的 WorkRequest 提交给 WorkManager。WorkManager 将会根据设备的状态和您的应用程序的优先级来调度您的工作。您可以使用 WorkInfo 对象来查询工作的状态。

OneTimeWorkRequest

OneTimeWorkRequest 是一个只执行一次的工作。您可以使用以下代码创建一个 OneTimeWorkRequest:

val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
    .build()

您可以使用 WorkManager.enqueue() 方法将您的 OneTimeWorkRequest 提交给 WorkManager:

WorkManager.getInstance(this).enqueue(workRequest)

RepeatingWorkRequest

RepeatingWorkRequest 是一个周期性执行的工作。您可以使用以下代码创建一个 RepeatingWorkRequest:

val workRequest = RepeatingWorkRequestBuilder<MyWorker>()
    .setRepeatInterval(15, TimeUnit.MINUTES)
    .build()

您可以使用 WorkManager.enqueue() 方法将您的 RepeatingWorkRequest 提交给 WorkManager:

WorkManager.getInstance(this).enqueue(workRequest)

WorkInfo

您可以使用 WorkInfo 对象来查询工作的状态。您可以使用以下代码获取工作的状态:

val workInfo = WorkManager.getInstance(this).getWorkInfoById(workRequest.id)

您可以使用 WorkInfo.getState() 方法获取工作的状态。工作的状态可以是:

  • ENQUEUED:工作已提交给 WorkManager,但尚未开始执行。
  • RUNNING:工作正在执行中。
  • SUCCEEDED:工作已成功完成。
  • FAILED:工作已失败。
  • CANCELLED:工作已取消。

解决Android 8.0之后的后台执行限制问题

在 Android 8.0 之后,后台执行受到了一些限制。这些限制是为了防止应用程序在后台消耗过多资源。如果您需要在后台执行长时间运行的任务,您需要使用 WorkManager。

WorkManager 可以帮助您避免后台执行限制,因为它可以确保在设备空闲时执行任务。这意味着您的应用程序不会在后台消耗过多资源。

结论

WorkManager 是一个用于管理和调度后台工作的库。它可以帮助您避免后台执行限制,并提高应用程序的性能和电池寿命。如果您需要在后台执行长时间运行的任务,您应该使用 WorkManager。