Android|Android Studio 对现代 WorkManager 的支持
在 上一篇文章 中,我们提到了现代 WorkManager API 对工具支持方面也进行了改进,本文我们将结合实际案例来看看具体有哪些改进。如果您更喜欢通过视频了解此内容,请在此处查看:
https://www.bilibili.com/vide...
△ Android Studio 对现代 WorkManager 的支持
从 Android Studio Arctic Fox 开始,您可以直接 在 Android Studio 内使用后台任务检查器检查和调试 Worker。
后台任务检查器是应用检查套件的一部分,它针对应用的几个方面提供更丰富详细的信息。为了充分利用检查器,您的应用需要使用 WorkManager 2.5 或更新的版本。
应用检查器启用方法
首次打开应用检查器的最快方法是: 连续按两下 "Shift" 键,然后在弹出对话框中输入 App Inspection 并按回车键确认。您也可以从菜单栏依次选择: View → Tool Window → App Inspection 来打开应用检查器面板。
文章图片
△ 打开 App Inspection 面板
示例演示
本次演示使用了 Android Studio Bumblebee 和 GitHub 上公开的 WorkManager 示例。
在 App Inspection 面板中切换到后台任务检查器 (Background Task Inspector) 标签,勾选应用中的 Filter,然后点击 Apply 按钮。可以看到在随着过滤的持续进行,每个 Worker 在其生命周期中的状态也在持续变化着。由于这些 Worker 按照顺序运行,所以 CleanupWorker 需要在下一个 Worker 开始之前完成。其他的所有 Worker 此时要么处于排队状态,要么处于阻塞状态。
文章图片
△ 使用 WorkManagerSample 应用和应用检查器面板
现在 CleanupWorker 已经完成,队列中的其他 Worker 也将按照次序运行。
△ 使用应用检查器面板的图表视图
【Android|Android Studio 对现代 WorkManager 的支持】您也可以从类似图示的图像中查看整个接续队列的内容。请从中选择一个 Worker,切换到图表视图 (按钮为流程图样式)。对于更加复杂的队列来说,图表视图是一种高效且不可或缺的理解手段。从这两种视图中,您都可以直接点击任何 Worker 来获得更详尽的分析。
文章图片
△ 后台任务的详细信息
在顶部是一个基本的说明信息,包括可点击的类名和一个唯一 ID。
数据库检查器
文章图片
△ 数据库检查器面板
前面的内容我们谈到,WorkManager 会将您的工作数据持久化,那么下面我们用数据库检查器 (Database Inspector) 进一步看看这是怎样实现的。您可以点击数据库检查器标签页,并在其中查找某项工作的唯一 ID。您会发现,有关该特定执行的各项信息都被保存下来了。
后台任务检查器
您还可以进一步查看某个特定的执行被安排到了哪一个队列中。和手动搜索调用信息相比,这种经过编组整理的方式能够明显提升分析效率。您可以看到特定 Worker 是否受到限制,以及更加详细的频率和执行状态信息。
WorkManager 可以使用其中一个 Worker 的输出数据,并将其传递到流水线下游的另一个 Worker 中。这一点您可以从任务详细信息的结果 (Results) 中看到。输出数据包含着每个 Worker 的唯一标识符,会按照队列顺序进行传递。
△ 演示 Worker 执行失败的场景
这里为您展示当工作链中的某个 Worker 执行失败时的场景。在工作的接续队列中插入了一个出错的 Worker,然后重启应用。可以看到,上一次运行的结果仍然在这里供您检查。这也进一步印证了刚才说到的工作数据持久化特性。这里启动并应用过滤器,选择 Worker 后再次点击图表视图,这样就能迅速定位工作开始出错的位置 (您可以留意这里的感叹号)。您可以从这里点击直接进入 Worker 视图,然后继续调试出错的会话。
了解更多
通过本文您已经对新的后台任务检查器做了简单了解。以上便是 WorkManager 相关全部内容,如需更多资源,请参阅:
- 现代 WorkManager API 已发布
- WorkManager 系列文章: 使用 Dagger 自定义 WorkManager
- WorkManager 文档: 使用 WorkManager 调度任务
- Codelab: 使用 WorkManager 处理后台任务
- Codelab: WorkManager 进阶知识
- WorkManager 示例代码
推荐阅读
- php不兼容_php不兼容ie
- ts|Typescript ---- 进阶篇
- 『无为则无心』Python面向对象|『无为则无心』Python面向对象 — 47、Python中的self详解
- 春招|【Android春招每日一练】(三十二) LeetCode Hot 10题
- 春招|【Android春招每日一练】(三十四) LeetCode Hot 5题+总结(完)
- Android|关于 Gradle 你应该知道的知识点
- Android|实例说明 Android 多线程、多进程与全局变量之间的关系
- 舅舅,对不起(五)
- Android开发——SQLite数据库框架Sugar的使用
- 十连四班的第二天