【JetPack】WorkManager笔记

server/2024/12/23 8:32:36/

WorkManager简介:
WorkManager 是 Android Jetpack 库中的一个重要组件。它用于处理那些需要在后台可靠执行的任务,这些任务可以是一次性的,也可以是周期性的,甚至是需要满足特定条件才执行的任务。例如,它可以用于在后台上传文件、下载更新、清理缓存等操作。
与传统的后台处理方式相比,WorkManager 具有很多优势。它可以根据设备的状态(如网络可用性、电量等)智能地调度任务,确保任务能够在合适的时机执行。即使应用程序进程被杀死,它依然能够保证任务的执行,这对于一些重要的后台任务来说是非常关键的。

		// 创建DataData data = new Data.Builder().putString("inputData", "Jay").build();
		// 创建触发条件 (触发条件满足,不会立刻执行)Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.NOT_REQUIRED).build();
		// 创建一次性执行的任务OneTimeWorkRequest workRequest1 = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {workRequest1 = new OneTimeWorkRequest.Builder(MyWork.class)// 设置触发条件.setConstraints(constraints)// 设置延迟执行.setInitialDelay(5, TimeUnit.SECONDS)// 指数退避策略,如果返回结果是retry,那么按线性2s,重复执行,大概就是2,4,8.setBackoffCriteria(BackoffPolicy.LINEAR, Duration.ofSeconds(2))// 设置标签.addTag("workRequest1")// 参数传递.setInputData(data).build();}
 		// 任务提交给系统WorkManager workManager = WorkManager.getInstance(this);// 将任务加入workManager队列workManager.enqueue(workRequest1);
 		// 观察任务状态workManager.getWorkInfoByIdLiveData(workRequest1.getId()).observe(this, new Observer<WorkInfo>() {@Overridepublic void onChanged(WorkInfo workInfo) {Log.d("test", workInfo.toString());if (workInfo != null) {String outString = workInfo.getOutputData().getString("key");Log.d("test", "outString = " + outString);}}});
		// 取消任务OneTimeWorkRequest finalWorkRequest = workRequest1;new Timer().schedule(new TimerTask() {@Overridepublic void run() {workManager.cancelWorkById(finalWorkRequest.getId());}}, 2000);
 		// 创建周期性任务 (周期不可少于15min)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(MyWork.class, Duration.ofMinutes(15)).build();workManager.enqueue(periodicWorkRequest);}

MyWork继承Worker类,在满足条件时执行Work

public class MyWork extends Worker {public MyWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {super(context, workerParams);}@NonNull@Overridepublic Result doWork() {
//        SystemClock.sleep(2000);String inputData = getInputData().getString("inputData");Log.d("test","MyWork doWork " + inputData);// 将参数传递回去Data data = new Data.Builder().putString("key", "执行成功").build();return Result.success(data);}
}

任务组合

在这里插入图片描述

public void addWork(View view) {OneTimeWorkRequest workRequest1 = new OneTimeWorkRequest.Builder(AWorker.class).build();OneTimeWorkRequest workRequest2 = new OneTimeWorkRequest.Builder(BWorker.class).build();OneTimeWorkRequest workRequest3 = new OneTimeWorkRequest.Builder(CWorker.class).build();OneTimeWorkRequest workRequest4 = new OneTimeWorkRequest.Builder(DWorker.class).build();OneTimeWorkRequest workRequest5 = new OneTimeWorkRequest.Builder(EWorker.class).build();// 任务组合WorkContinuation workContinuation1 = WorkManager.getInstance(this).beginWith(workRequest3).then(workRequest4);WorkContinuation workContinuation2 = WorkManager.getInstance(this).beginWith(workRequest1).then(workRequest2);List<WorkContinuation> list = new ArrayList<>();list.add(workContinuation1);list.add(workContinuation2);WorkContinuation.combine(list).then(workRequest5).enqueue();}

http://www.ppmy.cn/server/152445.html

相关文章

调整docker bridge地址冲突,通过bip调整 bridge地址

调整docker bridge地址冲突&#xff0c;通过bip调整 bridge地址 背景步骤 背景 我们在使用docker 过程中&#xff0c;docker 默认bridge地址可能会和一些业务地址相互冲突&#xff0c;需要调整docker bridge 的默认值。 步骤 1.清除当前所有镜像&#xff08;这一步非常关键&…

【Linux】shell语法

Shell基础语法全解 一、shell简介二、shell格式2.1 新建一个shell脚本文件2.2 执行脚本方式 三、变量3.1系统变量3.2自定义变量3.3 特殊变量3.3.1 $n 传入变量3.3.2 $# 输入参数个数3.3.3 $*、$ 输入参数内容3.3.4 $? 上一条命令执行结果 四、运算符 $[]、$(())五、条件判断5.…

DIY 集合求并集(union)运算的代码 ← Python

【算法分析】 已知 Python 提供了求并集运算的函数 union。代码示例如下; >>> s1{1,2,3} >>> s2{2,3,7,1,9} >>> s1.union(s2) {1, 2, 3, 7, 9} >>> 不过&#xff0c;知其然也要知其所以然。 本例自己 DIY 集合求并集&#xff08;union…

回溯---java---黑马

回溯 概念 程序在运行过程中分成了多个阶段 通过某些手段&#xff0c;将数据恢复到某一阶段&#xff0c;称之为回溯 手段包括&#xff1a;方法栈、自定义栈 使用基本数据类型n public class Backtracking{public static void main(String[] args) {rec(1);}public void r…

半导体数据分析(二):徒手玩转STDF格式文件 -- 码农切入半导体系列

一、概述 在上一篇文章中&#xff0c;我们一起学习了STDF格式的文件&#xff0c;知道了这是半导体测试数据的标准格式文件。也解释了为什么码农掌握了STDF文件之后&#xff0c;好比掌握了切入半导体行业的金钥匙。 从今天开始&#xff0c;我们一起来一步步地学习如何解构、熟…

从零用java实现 小红书 springboot vue uniapp (5)购物页聊天页

前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了个人中心页开发 今天我们具体的去进行实现购物页 聊天页 并且分享我开发时遇到的问题 首先先看效果 商品页 商品数据先用笔记数据 我们对布局整体规划一下 搜索组件 搜索组件是fiexd布局一直在页面…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…

电商新品发布自动化:RPA 确保信息一致性与及时性【rap.top】

一、教学目标 让学员了解电商新品发布过程中的挑战以及 RPA 的概念和优势。掌握 RPA 在电商新品发布中确保信息一致性与及时性的方法和流程。培养学员运用 RPA 解决实际问题的能力。 二、教学重难点 重点 RPA 在电商新品发布中的应用场景。实现信息一致性与及时性的具体策略…