📜  Android架构组件中WorkManager概述

📅  最后修改于: 2022-05-13 01:58:44.189000             🧑  作者: Mango

Android架构组件中WorkManager概述

Android WorkManager可以被认为是一个后台库,用于执行应该以有保证的方式运行但不一定立即运行的后台任务。使用 WorkManager,即使应用程序没有运行,甚至设备由于多种原因重新启动,我们也会将我们的后台排队。 WorkManager 还允许我们定义运行任务所需的约束,例如 Wi-Fi。或启动后台任务之前的电池可用性。

Android WorkManager 是 Android Jetpack(一套用于指导开发人员编写优质应用程序的库)的组成部分之一,也是 Android 架构组件(帮助开发人员设计健壮、可测试且易于维护的应用程序的组件集合)之一.

处理后台处理时何时使用 WorkManager?

随着 Android 操作系统多年来的巨大发展,对后台进程有一定的限制,这一切都是为了优化电池消耗并以最佳和明智的方式利用设备资源。每个新的 Android 版本,从 android marshmallow (API 23) 开始,都增加了一些限制,并且它们会继续出现。您可以在 Android 开发人员指南中查看等效的详细信息。因此,根据您的需要为您的应用选择最简单的后台处理方法非常重要。一旦您更喜欢使用 WorkManager,让我们快速提及案例。 Android WorkManager 通常是在执行以下任务时使用的理想后台库:

  1. 无法在选定的时间运行
  2. 可以推迟执行
  3. 即使在应用程序被杀死或设备重新启动或永久关闭后也一定会运行
  4. 在执行之前必须满足网络覆盖或网络可用性等限制条件

最简单的例子是当您的应用程序需要将大量用户数据上传到服务器时。这需要开发人员驻留并使用 WorkManager,因为它是所需的完美之物!

但为什么?

  1. 结果不需要立即反映在您的 Android 应用程序中(允许稍有延迟)
  2. 即使在上传开始时也必须上传数据,因此用户终止该应用程序以打开另一个应用程序或决定让手机处于静止状态,并且
  3. 网络和电池必须可用,以便在服务器上上传数据。

第 1 步:将工作管理器添加到 Android build.gradle

添加工作经理很简单,只需在您的项目级别中包含以下几行,您就可以开始了!

Java
dependencies
{
    def work_version = "2.5.0"
 
        // (Java only)
        implementation "androidx.work:work-runtime:$work_version"
 
        // Kotlin + coroutines
        implementation "androidx.work:work-runtime-ktx:$work_version"
 
        // optional - RxJava2 support
        implementation "androidx.work:work-rxjava2:$work_version"
 
        // optional - GCMNetworkManager support
        implementation "androidx.work:work-gcm:$work_version"
 
        // optional - Test helpers
        androidTestImplementation "androidx.work:work-testing:$work_version"
 
        // optional - Multiprocess support
        implementation "androidx.work:work-multiprocess:$work_version"
}


Java
public class WorkManagerOverviewGfg extends Worker {
    public WorkManagerOverviewGfg(@NonNull Context context,
                                  @NonNull WorkerParameters params)
    {
        super(context, params);
    }
    @Override public Result doSomeWork()
    {
 
        // Do the work here--in this case, upload the data.
        uploadData();
        return Result.success();
    }
}


Java
WorkRequest uploadRequestGfg = new OneTimeWorkRequest.Builder(WorkManagerOverviewGfg.class).build();


Java
WorkManager.getInstance(getContext).enqueue(uploadRequestGfg);


第 2 步:定义工作

我们需要像上面例子中提到的那样创建一些工作,然后我们需要通过覆盖doSomeWork()方法来扩展 Worker 类。下面给出的示例显示了如何将 Worker 添加到将数据(主要是图像)上传到服务器的 Android 应用程序中。

Java

public class WorkManagerOverviewGfg extends Worker {
    public WorkManagerOverviewGfg(@NonNull Context context,
                                  @NonNull WorkerParameters params)
    {
        super(context, params);
    }
    @Override public Result doSomeWork()
    {
 
        // Do the work here--in this case, upload the data.
        uploadData();
        return Result.success();
    }
}


上面提到的 Result 方法(从代码返回)告诉系统服务指定的工作/工作是否正常。如果它返回失败,那么它也给出了重试工作的方法

第 3 步:创建工作请求

一旦您定义了您的工作,您现在必须使用 WorkManager 服务安排它,以便使该服务运行。您还可以安排它以编程方式运行一段时间或多次,或使其仅运行一次!下面的代码片段将指导您如何构建只运行一次工作的服务!

Java

WorkRequest uploadRequestGfg = new OneTimeWorkRequest.Builder(WorkManagerOverviewGfg.class).build();

最后,步骤#4:向系统提交WorkRequest 以执行

成功制作 WorkRequest 后,需要完成的最后一步是使用 enqueue method() 将创建的 WorkRequest 提交给 WorkManager,然后使用 WorkManager 执行您的工作。下面的代码片段将指导您完成完成最后一步所需的步骤

Java

WorkManager.getInstance(getContext).enqueue(uploadRequestGfg);

就是这样!你已经做到了!

现在坐下来稳住,工作人员将花费的确切时间将包括您在 WorkRequest 中设置的所有步骤和约束以及此刻的系统状态。