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()方法获取返回值。
 

主要流程:

  1. 给WorkManager发送工作请求WorkRequest。
  2. WorkManager将该请求的相关参数放入WorkManager的数据库中。
  3. WorkManager根据设备版本、是否是前台任务等情况将请求操作传递给JobScheduler或者AlarmManager等部件。
  4. 检查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操作系统会在系统级别服务中,来判断用户的约束条件,当约束条件满足时就会执行任务,但是触发检测是采用广播的形式处理的,例如:网络连接成功 就触发...。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值