周期性任务

//周期性任务 //每隔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()
}

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

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

现在有需求

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

 

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()
}

日志

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