Android-Jetpack笔记-WorkManager
时间:2022-07-23
本文章向大家介绍Android-Jetpack笔记-WorkManager,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
WorkManager
能帮我们更好的管理后台任务,可以更好地管理执行时机、执行顺序和执行状态(有无网络、是否在充电)。他会根据系统版本选择合适的方案执行任务,比如在API 23
及以上使用JobScheduler
,以下则使用BroadcastReceiver
和AlarmManager
,能兼容到API 14
。同时,他会将任务存储进数据库来保证关机重启后任务仍可执行(这点有待验证,因为国内机型太多了)。
Jetpack笔记代码
本文源码基于SDK 29
使用
引入依赖:
def work_versions = "2.3.4"
implementation "androidx.work:work-runtime:$work_versions"
新建任务继承Worker
,
class MyWorker extends Worker {
@Override
public Result doWork() {
QrLog.e(getTags() + " doWork = " + getInputData().getString("input_data") + "," + Thread.currentThread());
return Result.success();
}
}
在activity中使用,
class WorkManagerActivity extends AppCompatActivity {
void onCreate(Bundle savedInstanceState) {
//创建要传递的参数,最大10KB
Data inputData = new Data.Builder().putString("input_data", "输入数据").build();
//创建约束条件
Constraints constraints = new Constraints.Builder()
.setRequiresCharging(true) //充电状态
.setRequiredNetworkType(NetworkType.CONNECTED) //网络连接
.setRequiresBatteryNotLow(true) //非低电量
.build();
//创建一次性请求
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(constraints) //设置约束条件
.setInitialDelay(2, TimeUnit.SECONDS) //延迟2秒执行
.addTag("MyWorker") //设置标签
.setInputData(inputData) //设置输入数据
.build();
//还有周期性请求PeriodicWorkRequest,需要注意的是内部限制了最小周期为15分钟
//执行任务,可链式调用,workRequest2执行完了才执行workRequest
WorkManager.getInstance(this).beginWith(workRequest2).then(workRequest).enqueue();
//可以监听任务的工作状态
LiveData<List<WorkInfo>> liveData = WorkManager.getInstance(this).getWorkInfosByTagLiveData("MyWorker");
liveData.observe(this, new Observer<List<WorkInfo>>() {
@Override
public void onChanged(List<WorkInfo> workInfos) {
//do something
}
});
}
}
运行即可。
原理
暂不分析源码,引用掘金-[译] 从Service到WorkManager的一张流程图。
优缺点
- 优点:
- 使用方便,内部会根据不同系统选择合适方案
- 能链式调度,让各任务按指定顺序执行
- 能配置各种执行状态,如有无网络、是否在充电
- 任务被存储进数据库,关机仍可执行(待验证)
- 缺点:
- 还没发现
参考
- 知乎-WorkManager的基本使用
- B站-Android Jetpack WorkManager | Android 中文教学视频
- 掘金-[译] 从Service到WorkManager
- 基础篇章:React Native 之 View 和 Text 的讲解
- CentOs7.3 修改主机名
- 基础篇章:React Native之Flexbox的讲解(Height and Width)
- PDF.js专题
- CentOs7.3 编译安装 Nginx 1.9.9
- 基础篇章:关于 React Native 之 RefreshControl 组件的讲解
- CentOs7.3 安装 JDK1.8
- 基础篇章:关于 React Native 之 ListView 组件的讲解
- maven环境快速搭建
- CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务
- CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务
- CentOs7.3 搭建 Redis-4.0.1 单机服务
- Shodan新手入坑指南
- 我用过的——Spring定时任务的几种用法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android 中Notification弹出通知实现代码
- Android编程实现添加低电流提醒功能的方法
- Android头像上传功能的实现代码(获取头像加剪切)
- Android自定义View画圆功能
- Android打包版本号设置方法
- Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例
- Android 6.0开发实现关机菜单添加重启按钮的方法
- 基于Socket.IO实现Android聊天功能代码示例
- Android 滑动监听的实例详解
- Android中使用ListView模拟微信好友功能
- Android实现压缩字符串的方法示例
- Android使用OkHttp请求自签名的https网站的示例
- Android Notification 使用方法详解
- Android空心圆及层叠效果实现代码
- 如何更改Dialog的标题与按钮颜色详解