基本知识
您需要了解以下几个 WorkManager 类:
Worker
:此位置用于放置您希望在后台执行的实际工作的代码。您需要扩展此类并替换doWork()
方法。WorkRequest
:此类表示请求执行某些工作。您将在创建WorkRequest
的过程中传入Worker
。在创建WorkRequest
时,您还可以指定Constraints
等内容,例如运行Worker
的时间。WorkManager
:此类实质上可以调度WorkRequest
并使其运行。它以一种在系统资源上分散负载的方式调度WorkRequest
,同时遵循您指定的约束条件。
创建一个 WorkRequest
,然后通过 WorkManager
将其加入队列。
- 输入和输出通过
Data
对象传入和传出。Data
对象是轻量化的键值对容器。它们用于存储少量可从WorkRequest
传入和传出的数据。 - 链接的另一个简便特点是,一个
WorkRequest
的输出会成为链中下一个WorkRequest
的输入。在每个WorkRequest
之间传递的输入和输出均显示为蓝色文本。
api
doWork() 中
通过调用 applicationContext 属性获取 Context
通过 val value = inputData.getString(key)
通过 `val outputData = workDataOf(key to value) Result.success(outputData)`
创建WorkManager实例
private val workManager = WorkManager.getInstance(application)
如果不需要配置什么,直接 OneTimeWorkRequest.from(worker),
如果需要配置,使用构建者模式创建 OneTimeWorkRequestBuilder<Worker>()......build()//包括setInputData(一个Data的实例)
OneTimeWorkRequest: 仅执行一次的 WorkRequest。
PeriodicWorkRequest: 在一个周期中重复执行的 WorkRequest
如何链接request:
val continuation = workManager.beginWith(workA)continuation.then(workB) // FYI, then() returns a new WorkContinuation instance .then(workC) .enqueue() // Enqueues the WorkContinuation which is a chain of work
确保工作链唯一:
// REPLACE THIS CODE:
// var continuation = workManager
// .beginWith(OneTimeWorkRequest
// .from(CleanupWorker::class.java))
// WITH
var continuation = workManager
.beginUniqueWork(
IMAGE\_MANIPULATION\_WORK\_NAME,//TAG字符串 确保工作链唯一
ExistingWorkPolicy.REPLACE, //一个枚举类, 定义出现相同TAG的时候该如何做
OneTimeWorkRequest.from(CleanupWorker::class.java) //开头的那个
)
取得work request三种状态的不同
- getWorkInfoByIdLiveData 对于一个确切的work request来获取info, 每一个work request实例id都会不一样
- getWorkInfosForUniqueWorkLiveData 当beginUniqueWork时,对于这条链上所有work request,返回一个list来包含
- getWorkInfosByTagLiveData 我们可以给一个work request打上一个Tag, 返回一个list包含所有使用这个Tag的不同work request实例的work info
而取消 work也有三种方式:根据特定id取消,根据Tag取消, 根据unique work chain name来取消一串work request。unique work chain name就是我们在定义beginUniqueWork时使用的TAG。
最后
现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
上述【详细资料】:扫描下方二维码,或者私信回复【技能提升】即可获取!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!
Android架构师之路很漫长,一起共勉吧!