Android Jetpack WorkManager 周期性任务/任务链与任务组合

周期性任务

      //周期性任务 //每隔15分钟去执行任务
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            PeriodicWorkRequest.Builder(MyWork::class.java, Duration.ofMinutes(15)).build()
        }

任务链

第一个work

package com.anguomob.jecpack.work

import android.content.Context
import android.os.SystemClock
import android.util.Log
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters

class MyWork(val context: Context, val workerParameters: WorkerParameters) :
    Worker(context, workerParameters) {
    private val TAG = "MyWork"
    override fun doWork(): Result {
        SystemClock.sleep(2000);
        val inputData = inputData.getString("input_data")

        Log.d(TAG, "MyWork doWork: ${System.currentTimeMillis()}")
        Log.d(TAG, "MyWork inputData: ${inputData}")
        //任务执行完毕 将数据返回
        val outputData = Data.Builder()
            .putString("output_data", "执行成功")
            .build()

        return Result.success(outputData)
    }
}

第二个work

package com.anguomob.jecpack.work

import android.content.Context
import android.os.SystemClock
import android.util.Log
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters

class MyWorkB(val context: Context, val workerParameters: WorkerParameters) :
    Worker(context, workerParameters) {
    private val TAG = "MyWorkB"
    override fun doWork(): Result {
        SystemClock.sleep(2000);
        val inputData = inputData.getString("input_data")

        Log.d(TAG, "MyWork doWork: ${System.currentTimeMillis()}")
        Log.d(TAG, "MyWork inputData: ${inputData}")
        //任务执行完毕 将数据返回
        val outputData = Data.Builder()
            .putString("output_data", "执行成功")
            .build()

        return Result.success(outputData)
    }
}

代码

    fun addWork2(view: View) {
        //一种更简介的获取方式
        val work = OneTimeWorkRequest.from(MyWork::class.java)
        val workB = OneTimeWorkRequest.from(MyWorkB::class.java)

        //先执行 work  后执行workB
        WorkManager.getInstance(this)
            .beginWith(work)
            .then(workB)
            .enqueue()
    }

 打印顺序将会是先第一个work 在workB 这样是链条样式的调用。所以叫任务链

现在有需求

 

a、b、c、d顺序不做要求。但是必须完成后才能执行e

WorkA代码

package com.anguomob.jecpack.work

import android.content.Context
import android.os.SystemClock
import android.util.Log
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters

class MyWorkA(val context: Context, val workerParameters: WorkerParameters) :
    Worker(context, workerParameters) {
    private val TAG = javaClass.simpleName
    override fun doWork(): Result {
        SystemClock.sleep(2000);
        val inputData = inputData.getString("input_data")

        Log.d(TAG, "MyWork doWork: ${System.currentTimeMillis()}")
        Log.d(TAG, "MyWork inputData: ${inputData}")
        //任务执行完毕 将数据返回
        val outputData = Data.Builder()
            .putString("output_data", "执行成功")
            .build()

        return Result.success(outputData)
    }
}

其他的B.C.D.E 都是改了类名而已不再贴出来

代码

    fun addWork2(view: View) {
        //一种更简介的获取方式
        val workA = OneTimeWorkRequest.from(MyWorkA::class.java)
        val workB = OneTimeWorkRequest.from(MyWorkB::class.java)
        val workC = OneTimeWorkRequest.from(MyWorkC::class.java)
        val workD = OneTimeWorkRequest.from(MyWorkD::class.java)
        val workE = OneTimeWorkRequest.from(MyWorkE::class.java)

        //先执行 workA,workB,workC,workE  后执行workE
        WorkManager.getInstance(this)
            .beginWith(arrayListOf(workA,workB,workC,workD))
            .then(workE)
            .enqueue()
    }

日志

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值