前言
个别状况下,咱们大部分的操作都是在 app 关上的时候进行的,然而在某些状况下,即便 app 敞开了,咱们也可能须要执行必要的动作,或者会采取一个动作,而不是让用户期待加载,咱们能够在后盾执行此操作并告诉用户后果。针对这些日常工作中经常出现然而又十分辣手的状况,学会应用 workManager 将会大家轻松解决这些问题。
WorkManager 是一个 API,可供大家轻松调度那些即便在退出利用或重启设施后仍应运行的牢靠异步工作。WorkManager API 是一个适宜用来替换所有先前的 Android 后盾调度 API(包含 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler 等)的组件,自己也建议您这样做。WorkManager 在其古代、统一的 API 中整合了其前身的性能,该 API 反对 14 及以上,在开发时思考到了对电池续航等影响。
何时应用 WorkManager
WorkManager 解决须要在满足各种束缚时运行的后盾工作,而不论应用程序过程是否处于活动状态。后盾工作能够在应用程序在后盾、应用程序在前台或应用程序在前台启动但转到后盾时启动。无论应用程序在做什么,后盾工作都应该继续执行,或者如果 Android 终止其过程则重新启动。
对于 WorkManager 的一个常见混同是它用于须要在“后盾”线程中运行但不须要在过程死亡后持续存在的工作。不是这种状况。对于此用例,还有其余解决方案,例如 Kotlin 的协程、线程池或 RxJava 等库。
针对许多不同的状况都须要运行后盾工作,因而运行后盾工作有不同的解决方案。
应用的充沛不必要条件?
在 WorkManager 的状况下,最好用于必须实现且可提早的后盾工作。
首先,问问本人:
- 这个工作须要实现吗?
如果利用被用户敞开,是否还须要实现工作?一个例子是带有近程同步的笔记应用程序;写完笔记后,如果心愿该应用程序将笔记与后端服务器同步。即便切换到另一个应用程序并且操作系统须要敞开该应用程序以回收一些内存,也会产生这种状况。就算重新启动设施,它也应该产生。能够通过 WorkManager 来确保工作实现。
- 这个工作能够延期吗?
咱们能够在当前运行的工作,或者只运行是有用的权力呢?如果工作能够稍后运行,那么它是可提早的。看下后面的示例,立刻上传即时笔记很现实,然而因为网络限度等起因, 不可能和编辑同步进行,不过这也不是什么大问题,毕竟支流利用的用户习惯都是这样。而正因为 WorkManager 尊重操作系统背景限度,并尝试以省电的形式运行您的工作,因而这也是抉择 WorkManager 来做延时工作的最佳抉择之一。
WorkerManager 的工作流程
在后盾,WorkManager 依据以下条件应用底层作业来调度服务:
🎃Work Request
咱们能够创立两种类型的工作申请。
OneTimeWorkRequest → 当咱们只解决一次
PeriodicWorkRequest → 当咱们以肯定的工夫距离来做
🎃 Worker
Coroutinework 是要暂停一个 DoWork 的通过在操作过程中进行必要的处理函数重载这个函数胜利 失败条件,咱们能够解决。
🌀工作器初始化繁难过程。
咱们指定它将应用 OneTimeWorkRequest 触发一次,并将咱们的 Worker 类作为参数。咱们 > 运行应用 WorkManager 创立的 workRequest。
doWork 函数将在 Worker 被触发时运行。
📝向 Worker 发送数据
在构建 WorkRequest 之前,咱们能够设置很多值,其中之一便是 setInputData() 参数,足以发送属于 androidx.work 的 Data。
在 Worker 类中,咱们能够获取与 inputData 一起发送的值及其键。
⚠️ 限度条件
咱们能够应用 setConstraints() 设置一些条件,以便在运行 worker 之前查看这些条件。
🟢 setRequiresDeviceIdle → 如果咱们想让它在进入 Doze 模式时工作,咱们只须要将其设置为 true。默认值为假。
🟢 setRequiresNetworkType → 咱们能够设置互联网连贯状态。
🟢 setRequiresBatteryNotLow → 如果电池电量不低,咱们能够设置它的状态。默认值为假。
🟢 setRequiresCharging → 插入状态。默认值为假。
⏳Delay
提早局部对于 OneTimeRequest 会起作用一次,对于长期 workder 也会以同样的形式起作用,然而这种提早不会在每次触发时起作用。
🧐Worker State Observe
咱们能够通过状态察看咱们在 Worker 中所做的过程,有不止一种办法,咱们能够在它们之间进行抉择。
getWorkInfosByTagLiveData —> getWorkInfosForUniqueWorkLiveData —> getWorkInfoByIdLiveData
自己更偏差应用 workRequest 的 id 进行察看,通过将数据调配给 Worker 中的胜利和失败状态,将可能再次接管该数据并对其进行察看。
⏱️ 长期 worker
它的工作形式与 OneTime 相似,除此之外咱们须要指定作用工夫。
然而!会存在一个问题,如果设施处于休眠模式,过程会被搁置;当设施被唤醒时,过程会按程序再次解决。如果大家心愿能精确对过程进行操作,则须要往清单文件中增加一下权限。
uses-permission android:name=”android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”/>
官网文档 :
https://developer.android.com…
https://bugrayetkinn.medium.c…
https://android-developers.go…
❤️/ 感激反对 /
以上便是本次分享的全部内容,心愿对你有所帮忙 ^_^
喜爱的话别忘了 分享、点赞、珍藏 三连哦~
欢送关注公众号 程序员巴士 ,来自字节、虾皮、招银的三端兄弟,分享编程教训、技术干货与职业规划,助你少走弯路进大厂。