Android开发(Jetpack) 简单使用WorkManager

一、简介

WorkManager 是适合用于持久性工作的推荐解决方案。如果工作始终要通过应用重启和系统重新启动来调度,便是持久性的工作。由于大多数后台处理操作都是通过持久性工作完成的,因此 WorkManager 是适用于后台处理操作的主要推荐 API。

WorkManager 可处理三种类型的持久性工作:

  • 立即执行:必须立即开始且很快就完成的任务,可以加急。
  • 长时间运行:运行时间可能较长(有可能超过 10 分钟)的任务。
  • 可延期执行:延期开始并且可以定期运行的预定任务。
不同类型的持久性工作彼此之间的关系
不同类型的持久性工作彼此之间的关系标题

二、使用和示例

1、依赖声明

dependencies {
    def work_version = "2.7.1"

    // (仅限Java)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin+协程
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // (可选)RxJava2支持
    implementation "androidx.work:work-rxjava2:$work_version"

    // (可选) GCMNetworkManager支持
    implementation "androidx.work:work-gcm:$work_version"

    //(可选) 测试使用
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // (可选) 多进程支持
    implementation "androidx.work:work-multiprocess:$work_version"
}

2、Kotlin示例

新建一个工作work


import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters

class TestKWork(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
    /**
     *重写此方法以执行实际的后台处理。此方法在
     *后台线程-您需要同步完成工作并返回
     *{@link androidx.work.ListenableWorker.Result}。一旦你从这里回来
     *方法,工人被视为已完成其工作,并将被销毁。如果
     *您需要在自己选择的线程上异步执行工作,请参见
     *{@link ListenableWorker}。
     *工人有明确的定义
     *<a href=“https://d.android.com/reference/android/app/job/JobScheduler“>执行窗口</a>
     *以完成其执行并返回{@link androidx.work.ListenableWorker.Result}。之后
     *此时间已过期,将向工人发出停止的信号。
     *
     *@return计算的{@link androidx.work.ListenableWorker.Result};请注意
     *如果使用
     *{@link androidx.work.ListenableWorker.Result#failure()}或
     *{@link androidx.work.ListenableWorker.Result#failure(数据)}
     */

    override fun doWork(): Result {
        //执行后台任务
        return Result.success()
    }

}

返回值简要注明:
1、/**
*返回{@link Result}的实例,该实例可用于指示工作
*已成功完成。任何依赖于此的工作都可以执行,只要
*满足其其他依赖性和约束。
*
*@return表示成功执行工作的{@link Result}实例
*/

Result.success()

2、/**
*返回{@link Result}的实例,该实例可用于指示工作
*遇到暂时性失败,应使用中指定的回退重试
*{@linkWorkRequest.Builder#setBackoffCriteria(BackoffPolicy,long,TimeUnit)}。
*
*@return{@link Result}的实例,指示需要重试工作
*/

Result.retry()

3、/**
*返回{@link Result}的实例,该实例可用于指示工作
*以永久性故障完成。任何依赖于此的工作也将标记为
*失败,将不会运行<b> 如果你需要童工来跑步,你需要使用
*{@link#success()}或{@link#success(数据)}</b>;故障表示永久停机
*工作链的一部分。
*
*@return执行工作时指示失败的{@link Result}实例
*/

Result.failure()

将work加入WorkManager

   val workManager = WorkManager.getInstance(context)
   val request: WorkRequest = OneTimeWorkRequest
            .Builder(TestKWork::class.java)
            .addTag("TestKWork")
            .build()

    workManager.enqueue(request)

取消work任务

//取消全部任务
workManager.cancelAllWork()
//通过任务的ID 取消任务
workManager.cancelWorkById(request.id)
//取消对应的TAG的全部任务
workManager.cancelAllWorkByTag("TestKWork")

 

3、Java示例


import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

public class TestJWork extends Worker {


    public TestJWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);

    }

    @NonNull
    @Override
    public Result doWork() {



        return Result.success();
    }
}

将work加入WorkManager

   WorkManager workManager = WorkManager.getInstance(this);

   WorkRequest request = new OneTimeWorkRequest
                .Builder(TestJWork.class)
                .addTag("TestJWork")
                .build();

   workManager.enqueue(request);

取消work任务

 workManager.cancelAllWork();
 workManager.cancelWorkById(request.getId());
 workManager.cancelAllWorkByTag("TestJWork");

以上内容只是WorkManager的简要内容,具体内容还是以Google官方文档为准

定义WorkRequest

如何定义和自定义 WorkRequest 对象来处理常见用例,例如:
1.调度一次性工作和重复性工作
2.设置工作约束条件,例如要求连接到 Wi -Fi 网络或正在充电
3.确保至少延迟一定时间再执行工作
4.设置重试和退避策略
5.将输入数据传递给工作
6.使用标记将相关工作分组在一起

关于定义WorkManager - Google官方说明文档

如果对您有一些意义,希望您给博主一些鼓励(点赞、关注、收藏),如果有错误欢迎大家评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值