热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WorkManager简介

插图来自VirginiaPoltrackAndroid系统处理后台工作有很多注意事项和最佳实践,详见这篇文章是WorkManager系列中的第一篇。我们将探讨WorkManager的基础知识,如何以及何时使用它,以及幕后发生了什么。然后我们将深入研究更复杂的用例。
WorkManager 简介

插图来自Virginia Poltrack

Android 系统处理后台工作有很多注意事项和最佳实践,详见 Google’s Power blog post series 。其中一个反复出现的调用是一个名为WorkManager 的Android Jetpack 库,它扩展了JobScheduler 框架 API 的功能,并支持 Android 4.0+(API 14+)。WorkManager 测试版今天刚刚发布!

这篇文章是 WorkManager 系列中的第一篇。我们将探讨 WorkManager 的基础知识,如何以及何时使用它,以及幕后发生了什么。然后我们将深入研究更复杂的用例。

WorkManager 是什么?

WorkManager 是Android 架构组件之一,也是 Android Jetpack 的一部分,是一个关于如何构建现代 Android 应用程序的新见解。

WorkManager 是一个 Android 库,在满足工作的 约束条件 时运行 可延迟 的后台工作。

WorkManager 适用于需要 保障 的任务,即使应用程序退出,系统也会运行它们。

换句话说,WorkManager 提供了一个电池友好的 API,它封装了 Android 后台行为限制多年来的演变。这对于需要执行后台任务的 Android 应用程序至关重要!

什么时候使用 WorkManager

无论应用程序进程是否存在,WorkManager 都会处理在满足各种约束条件时需要运行的后台工作。后台工作可以在应用程序位于后台、前台或者应用在前台打开即将转到后台的时候启动。无论应用程序在做什么,后台工作都应该继续进行,或者在 Android 终止其进程时重启其后台工作。

关于 WorkManager 的一个常见误解是它需要在“后台”线程中运行,但不需要在进程死亡时存活。事实并非如此。这种用例还有其他解决方案,如 Kotlin 的协程,ThreadPools 或 RxJava 等库。你可以在后台处理指南中找到有关此用例的更多信息。

有许多不同的情况下,你需要运行后台工作,因此需要使用不同的解决方案来运行后台工作。这篇 关于后台运行的博客文章 提供了很多关于何时使用 Workmanager 的有用信息。请看博客中的此图表:

WorkManager 简介

图解来自 Android 中的现代后台运行

对于 WorkManager,最适合处理的是必须 完成 并且可以 延迟 的后台工作。

首先,问问你自己:

  • 这个任务需要完成吗?如果应用程序被用户关闭了,是否仍需要完成任务?一个例子是带有远程同步的笔记应用程序;每次你写完一个笔记,你就会期望该应用程序将你的笔记与后端服务器同步。即使您切换到另一个应用程序并且操作系统需要关闭应用程序以回收一些内存。即使重新启动设备也会发生这种情况。WorkManager 能够确保任务完成。

  • 这个任务可以延迟吗?我们可以稍后运行任务,还是只在 现在 运行才可以用?如果任务可以稍后运行,那么它是可延迟的。回到前面的例子,立即同步你的笔记会很好,但是如果不能立即同步而是稍后进行的话也没什么大问题。WorkManager 尊重操作系统后台限制,并尝试以电池高效的方式运行你的工作。

因此,作为指导原则,WorkManager 适用于需要确保系统将运行它们的任务,即使应用程序退出也是如此。它不适用于需要立即执行或需要在确切时间执行的后台工作。如果你需要在准确的时间执行工作(例如闹钟或事件提醒),请使用AlarmManager。对于需要立即执行但长时间运行的工作,你通常需要确保在前台执行工作;是否通过限制执行到前台(在这种情况下工作不再是真正的后台工作)或使用前台服务。

当你需要在更复杂的场景中触发一些后台工作时,WorkManager 可以并且应该与其他 API 配对使用:

  • 如果你的服务器触发了工作,WorkManager 可以与 Firebase Cloud Messaging 配对使用。
  • 如果你正在使用广播接收器监听广播,然后需要触发长时间运行的工作,那么你可以使用 WorkManager。请注意,WorkManager 支持许多通常作为广播传播的常见Constraints — 在这些情况下,你不需要注册自己的广播接收器。

为什么要用 WorkManager?

WorkManager 运行后台工作,同时能够为你处理电池和系统健康的兼容性问题和最佳实践。

此外,你可以使用 WorkManager 安排定时任务和复杂的从属任务链:后台工作可以并行或顺序执行,你可以在其中指定执行顺序。WorkManager 无缝地处理任务之间的输入和输出传递。

你还可以设置后台任务运行时间的标准。例如,如果设备没有网络连接,则没有理由向远程服务器发出 HTTP 请求。因此,您可以设置约束条件,该任务只能在网络连接时运行。

作为保证执行的一部分,WorkManager 负责在设备或应用程序重启时保持工作。你也可以轻松地定义重试策略如果你的工作已停止并且您想稍后重试。

最后,WorkManager 允许你观察工作请求的状态,以便你可以更新 UI。

总而言之,WorkManager 提供了以下好处:

  • 处理不同系统版本的兼容性
  • 遵循系统健康最佳实践
  • 支持异步一次性和周期性任务
  • 支持带输入/输出的链式任务
  • 允许你设置在任务运行时的约束
  • 即使应用程序或设备重启,也可以保证任务执行

让我们看一个具体的例子,我们构建一个将过滤器应用于图像的并发任务管道。然后将结果发送到压缩任务,然后发送到上传任务。

我们可以为这些任务定义一组约束,并指定何时可以执行它们:

WorkManager 简介

带有约束的任务链示例

所有这些 workers 都定义了一个精确的序列:我们不知道过滤图像的顺序,但我们知道只有在所有过滤器工作完成后,Compress 工作才会启动。

WorkManager 调度程序的工作原理

为了确保兼容性达到 API 14 级别,WorkManager 根据设备 API 级别选择适当的方式来安排后台任务。WorkManager 可能使用 JobScheduler 或 BroadcastReceiver 和 AlarmManager 的组合。

WorkManager 简介

WorkManager 如何确定要使用的调度程序

WorkManager 准备好用于生产了吗?

WorkManager 现在处于测试阶段。这意味着在此主要修订版中不会有重大的 API 变更。

当 WorkManager 稳定版本发布时,它将是运行后台任务的首选方式。 因此,这是开始使用 WorkManager 并帮助改进它的好时机!

感谢Lyla Fujiwara。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • Sass 是一种 CSS 的预处理器,通过使用变量、嵌套、继承等高级功能,使得 CSS 的编写更加灵活和高效。本文将介绍 Sass 的基本语法及其安装使用方法。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 本文记录了作者在尝试启用IIS的Gzip压缩功能时遇到的挑战,特别是当企业内部网络使用ISA服务器作为代理时的问题。文章详细描述了问题的发现过程、解决步骤以及最终的解决方案。 ... [详细]
  • 使用URLHttpConnection获取并展示图片至ImageView的方法
    本文介绍如何通过URLHttpConnection方式从网络加载图片,并将其显示在Android应用的ImageView组件上。包括布局文件和Java代码的具体实现。 ... [详细]
  • JobScheduler5.0源码分析
    0.JobScheduler执行代码mJobScheduler(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); ... [详细]
  • Windows 系统中 Flutter 与 IntelliJ IDEA 的环境配置指南
    本指南详细介绍了如何在 Windows 操作系统上设置 Flutter 开发环境,并集成至 IntelliJ IDEA 中,适合初学者及专业人士参考。 ... [详细]
  • 本文探讨了在JavaScript中如何有效地从服务器控件DropDownList中获取绑定的ID值,而非仅仅是显示的文本值。这对于需要根据用户选择动态处理数据的应用场景非常有用。 ... [详细]
  • 电子与正电子的相互作用
    本文探讨了电子与正电子之间的基本物理特性及其在现代物理学中的应用,包括它们的产生、湮灭过程以及在粒子加速器和宇宙射线中的表现。 ... [详细]
  • 本文详细介绍了Java编程语言中的关键字及其用途,包括53个关键字和2个保留字。文章不仅解释了每个关键字的基本功能,还提供了实际应用场景中的使用示例。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上)
    匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上) ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
author-avatar
王碧婷568473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有