WorkManager
WorkManager对比AsyncTask, ThreadPool的优势:WorkManager里面的任务在应用退出之后还可以继续执行。AsyncTask, ThreadPool里面的任务在应用退出之后不会执行。WorkManager自动选用JobScheduler, 或是AlarmManager来实现后台任务。
使用WorkManager的一些任务示例:
上载日志、将过滤器应用于图像并保存图像、定期将本地数据与网络同步等。
优点包括:
- 支持异步一次性和定期任务
- 支持网络条件,存储空间和充电状态等约束
- 链接复杂的工作请求,包括并行运行工作
- 一个工作请求的输出用作下一个工作的输入
- LiveData支持可轻松在UI中显示工作请求状态
核心类概述
1 Worker
Worker是一个抽象类,这个类用来指定具体需要执行的任务。使用时要继承这个类并且实现里面的doWork()方法,在其中写具体的业务逻辑。
2 WorkRequest
代表一项任务请求。一个 WorkRequest对象至少要指定一个Worker类。同时,还可以向WorkRequest对象添加 ,指定任务应运行的环境等。每个人WorkRequest都有一个自动生成的唯一ID, 可以使用该ID来执行诸如取消排队的任务或获取任务状态等操作。WorkRequest是一个抽象类; 有两个直接子类 OneTimeWorkRequest和 PeriodicWorkRequest。与WorkerRequest相关的有如下两个类:
① WorkRequest.Builder:用于创建WorkRequest对象的助手类 ,其有两个子类OneTimeWorkRequest.Builder和 PeriodicWorkRequest.Builder,分别对应两者创建上述两种WorkerRequest。
② Constraints:指定任务运行时的限制(例如,“仅在连接到网络时才能运行”)。可以通过 Constraints.Builder来创建该对象,并在调用WorkRequest.Builder的build()方法之前,将其传递 给WorkerRequest。
3 WorkManager
这个类用来安排和管理工作请求。前面创建的WorkRequest 对象通过WorkManager来安排的顺序。 WorkManager调度任务的时候会分散系统资源,做好类似负载均衡的操作,同时会遵循前面设置的对任务的约束条件。
4 WorkStatus
每一个WorkRequest都会有一个WorkStatus与之对应,里面包含了该任务的许多信息,可以通过WorkManager来获取包含WorkStatus的LiveData对象。开发者可以通过观察该LiveData对象来监听与之对应的任务所处的状态,并在任务完成后通过调用WorkStatus的getOutputData()方法获取返回值。
主要流程:
- 给WorkManager发送工作请求WorkRequest。
- WorkManager将该请求的相关参数放入WorkManager的数据库中。
- WorkManager根据设备版本、是否是前台任务等情况将请求操作传递给JobScheduler或者AlarmManager等部件。
- 检查Worker是否满足约束条件,当满足约束条件时调用执行Worker。
广播流程
解释说明:
最少轮询/循环一次 15分钟(Google规定的)一直都是 ENQUEUE状态,因为 你是轮询的任务看不到 SUCCESS
设置约束,WorkManger提供了以下的约束作为Work执行的条件:
* setRequiredNetworkType:网络连接设置
* setRequiresBatteryNotLow:是否为低电量时运行 默认false
* setRequiresCharging:是否要插入设备(接入电源),默认false
* setRequiresDeviceIdle:设备是否为空闲,默认false
* setRequiresStorageNotLow:设备可用存储是否不低于临界阈值
APK清单文件里面(第一次)执行(通过合并AndroidManifest.xml文件的<provider>标签在oncreate方法中完成第一次初始化)
* 1.初始化 数据库 ROOM 来保存你的任务 (持久性保存的) 手机重新,APP被杀掉 没关系 一定执行
* 2.初始化 new GreedyScheduler
* 3.初始化 配置信息 configuration (执行的信息,线程池任务,...)
面试题:WorkManager是干嘛用的?
答:处理非及时任务,举例子:每天同步一次数据到服务器,这种类似的需求,不是及时执行,但是又保证会执行的非及时任务。
面试官 接着问:WorkManager是怎么保证,当我把APP杀掉后呢?
答:记录用户的所有信息并全部保存到数据库,而并非保存在内存中,这样做的好处,就是持久性保存记录,所有APP被杀掉后 依然可以获取所有任务信息。
面试题:你研究过WorKManager源码,任务是怎么保证一定执行的呀?
答:Android操作系统会在系统级别服务中,来判断用户的约束条件,当约束条件满足时就会执行任务,但是触发检测是采用广播的形式处理的,例如:网络连接成功 就触发...。
WorkManager相关推荐
- 使用 WorkManager 管理后台和前台工作
随着设备性能提升和软件生态发展,越来越多的 Android 应用需要执行相对更复杂的网络.异步和离线等任务.例如用户想要离线观看某个视频,又不想一直停留在应用界面等待下载完成,那么就需要以一定的 ...
- Jetpack WorkManager的使用-完全解析
谷歌官方API介绍 兼容范围广 Pangu-Immortal (Pangu-Immortal) · GitHub WorkManager最低能兼容API Level 14,并且不需要你的设备安装有Go ...
- WorkManager从入门到实践,有这一篇就够了
作者 | Eason 来源 | 程序员巴士 前言 一般情况下,我们大部分的操作都是在app打开的时候进行的,但是在某些情况下,即使app关闭了,我们也可能需要执行必要的动作,或者会采取一个动作,而不是 ...
- 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
我想安排每晚数据库更新.所以我使用新的Android WorkManager.我的理解是,一旦安排它将始终独立于应用程序的生命周期在后台运行. 是对的吗?我的第一次测试显示Work只在应用程序运行时执 ...
- 【Jetpack】WorkManager
[JetPack]WorkManager 转载自享学课堂-derry,非常感谢derry的讲解 WorkManager有什么用: 一:确保重要的后台任务,一定会被执行,后台任务(例如:非及时性的 (请 ...
- android 定时推送提醒,使用workManager实现每日定时推送通知
写这篇博客的缘由来自一个需求: 每日定时推送通知,提醒用户完成签到.如果后台被清理,则在打开App后立即推送. 众所周知,如今的Android国产ROM想要实现定时操作需要做极强的保活.然而一旦做了保 ...
- WorkManager笔记: 二、管理工作
文章目录 一.标记工作 二.输入输出数据 1.设置输入数据 2.设置输出数据 3.拿到输出结果 三.管理工作 1.唯一工作: 2.观察您的工作 3.取消和停止工作 四.观察工作器执行进度 五.Work ...
- WorkManager详解,【面试总结】
override fun doWork(): Result { val A = inputData.getInt("A",0) val B = inputData.getStrin ...
- Android开发之定时任务(AlarmManager、WorkManager)
Android 程序的定时任务主要有AlarmManager.WorkManager两种. 一.AlarmManager AlarmManager,又称闹钟,可以设置一次性任务,周期重复任务,定时重复 ...
最新文章
- Nginx(九)-- Nginx实际使用配置
- Windows下打包maven项目,编写bat脚本,dos命令在后台运行与关闭
- Java Script基础(九) 下拉列表对象
- 救命代码_救命! 如何选择功能?
- 谷粒商城RabbitMQ设计思想详解:消息队列双重保险设计
- oledb excel java_C#中Excel 2016的oledb连接字符串
- 02-再探MySQL数据库
- MongoDB Shell操作
- Java1.7之后Arrays.sort对数组排序DualPivotQuicksort.sort
- 2022年数据库云管平台白皮书
- 5.11 学习日记,首页banner做好了
- 计算机的代表性产品,电脑展回顾 十款最具代表性存储产品
- 了解SQL Server中NOLOCK和WITH NOLOCK表提示的影响
- [转载] python更新numpy_Python numpy从1.6更新到1.8
- mysql比较varchar值大小_Mysql varchar大小长度问题
- 30个专业的电子商务网站,助您一臂之力
- 【Python脚本进阶】2.4、conficker蠕虫(下):暴破口令,远程执行进程
- WGS84 与 北京54 坐标系互转
- 步步为营 SharePoint 开发学习笔记系列 二、安装和配置
- 安卓机器人+淘宝客介绍
热门文章
- nodejs mongodb
- 64位win7下安装SQL Server 2008(图文解说版)----本人备注
- Oracle表格误删,Oracle误删表空间文件
- 人工智能基础部分11-图像识别实战(网络层联想记忆,代码解读)
- spark中的转换算子和行动算子区别(transformations and actions)
- 实现单链表的就地逆置
- js判断APP和浏览器
- 局部边缘保持滤波(LEP)高动态范围图像HDR压缩 python实现
- 李国杰披露AMD技术转让 只能看不能吃(全文版)
- 从没想过从上帝视角看地球,竟美得如此震撼!