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