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官方说明文档

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用WorkManager调度任务时,任务将在后台线程上执行,而不会影响UI线程,因此需要使用LiveData或EventBus等机制来更新UI。 以下是一个示例代码,使用WorkManager间隔5秒执行一次任务,并使用LiveData更新UI: 首先,在build.gradle文件中添加以下依赖项: ```groovy implementation "androidx.work:work-runtime:2.6.0" ``` 接下来,创建一个Worker类来执行任务: ```kotlin class MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): Result { // 执行任务 // 这里仅打印一条日志 Log.d("MyWorker", "Task executed at ${System.currentTimeMillis()}") return Result.success() } } ``` 然后,在Activity或Fragment中,使用WorkManager调度任务并更新UI: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var workManager: WorkManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 初始化WorkManager workManager = WorkManager.getInstance(this) // 创建观察者,用于更新UI val observer = Observer<WorkInfo> { workInfo -> if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) { // 任务执行成功,更新UI textView.text = "Task executed at ${System.currentTimeMillis()}" } } // 创建任务请求 val request = PeriodicWorkRequestBuilder<MyWorker>(5, TimeUnit.SECONDS).build() // 提交任务 workManager.enqueue(request) // 观察任务状态 workManager.getWorkInfoByIdLiveData(request.id).observe(this, observer) } } ``` 上述代码中,创建了一个周期性任务请求,并将其提交给WorkManager。然后使用LiveData观察任务状态,并在任务执行成功时更新UI。在这个示例中,更新UI的方法是设置一个TextView的文本内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值