Android Jetpack WorkManager 周期性任务/任务链与任务组合
2023-09-27 14:27:38 时间
周期性任务
//周期性任务 //每隔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()
}
日志
相关文章
- Android Hook框架adbi的分析(2)--- inline Hook的实现
- Android实现固定头部信息,挤压动画(相似通讯录)
- 干货|APP自动化Android特殊控件Toast识别
- Android数据库之基本概念(上)
- Android Jetpack组件 Compose 使用介绍
- [Android应用]《花界》V1.0 正式版隆重发布!
- android 写文件权限
- 送你一份 Android Jetpack 架构入门秘籍,从入门到强化实战
- 如何在Eclipse中查看Android API源码以及support包源码
- Windows自带Android模拟器启动失败
- 【Android】ProgressBar
- Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍
- Android 7.0调用相机拍照,返回后显示拍照照片
- Android端新版Office Insider发布:Excel中数据集可转地图
- 最最实用的android studio设置教程
- 带你了解Android Jetpack
- Android消息处理机制
- Android学习之ProgressBar的垂直显示(消失)
- Android从无知到有知——NO.3