如何清晰地掌握 Android 应用中后台任务的执行情况?
Android Studio 包含了许多像 布局检查器 和 数据库检查器 这样的检查器,来帮助您调查并了解应用在运行时的内部状态。在 Android Studio Arctic Fox 中,我们发布了一个新的检查器 (Background Task Inspector),用于帮助您监控和调试在应用中使用 WorkManager 2.5.0 或更高版本所调度的 Worker。
对于运行后台的异步任务,甚至是在应用被关闭之后的情况下,都推荐使用 WorkManager。虽然可以很方便的将任务配置成 WorkManager 的 Worker,但将 Worker 加入到队列中后就很难监控它的执行情况,遇到问题也不方便调试。
您可以通过后台任务检查器轻松地监控一个 Worker 的工作状态,查看它和与其链接的其他 Worker 的关系,或者检查 Worker 的输出、频率及其他与时间相关的信息。让我们通过一个示例项目来看看后台任务检查器能做些什么。
我将使用 architectural-components 仓库 中的 WorkManager 示例应用来演示后台任务检查器 (需要将工程中 versions.gradle 里的 versions.work 设置为 2.5.0 或更高版本以使得 Background Task Inspect 更好的工作)。如果您想试一试,可以检出该仓库并随着阅读文章一起尝试。该应用使用 WorkManager 将用户所选择的滤镜应用在已挑选的照片上。用户可以通过该应用在图库中选择一张图片或者简单地使用一张库存照片。为了演示后台任务检查器如何工作,我将会运行应用并选择一张图片来应用滤镜。
△ 为选定的图像应用所选的滤镜
这些滤镜都是作为 WorkManager Worker 实现的。稍等一会儿该应用就会展示应用了所选滤镜的图片。在不了解示例应用的情况下,来看看我还能通过后台任务检查器知道些什么。
选择菜单栏上的 View > Tool Windows > App Inspection 打开后台任务检查器。
△ View > Tool Windows > App Inspection
在 App Inspection (应用检查) 窗口中选择 Background Task Inspector 栏后,我在 API 级别 26 或更高的设备/模拟器上再次运行该应用。如果没有自动选中应用,在下拉菜单中选择应用进程。连接到应用进程后,就可以回到我正在运行的应用,选择所有的滤镜并点击 "APPLY"。此时我可以在后台任务检查器中看到运行中的作业列表。
△ 正在运行的作业列表
后台任务检查器列出了所有正在运行、已失败和已完成作业的类名、当前状态、开始时间、重试次数以及输出数据。点击列表中的一个作业打开 Work Details 面板。
△ Work Details 面板
该面板提供了 Worker 的 Description (描述)、Execution (执行情况)、WorkContinuation (工作延续性) 和 Results (结果)。让我们来仔细看看每个部分。
△ Work Details
Description (描述) 一节列出了 Worker 包含完全限定软件包名称、指派给它的标签和它的 UUID。
△ Execution
接下来,Execution (执行情况) 一节展示了 Worker 的约束 (如果有)、运行频率、状态以及是哪个类创建了该 worker 并将其加入了队列。
△ WorkContinuation
WorkContinuation (工作延续性) 一节显示了该 Worker 在工作链上的位置。您可以检查前一个、后一个或工作链上的其他 Worker (如果有)。您可以通过点击另一个 Worker 的 UUID 导航到它的详情。在这个工作链上,我能看到应用使用了 5 个不同的 Worker。Worker 的数量根据用户选择的滤镜情况可能有所不同。
这是个很棒的功能,但当您面对不熟悉的应用时不一定能想象出工作链。而后台任务检查器另一个很棒的特性就是它能够以图形化的形式展示工作链。仅需点击 WorkContinuation 一节中的 "Show in graph" 链接或点击作业列表顶部的 "show Graph View" 按钮来切换到 Graph View 即可。
△ Graph View
Graph View 能帮您了解 Worker 的顺序、在不同阶段之间传递的数据以及它们各自的状态。
△ Results
Work Details 面板的最后一节是 Results 窗格。在这一节您能看到选中的 Worker 的开始时间、重试次数及输出数据。
现在假设我想测试当一个 Worker 停止时会发生什么。为了实现这个目的,我将再次运行应用,选择 Worker,等它的状态变为正在运行后点击左上角的 "Cancel Selected Work" 按钮。一旦我这么做了,我选择的 Worker 和链中剩余的 Worker 的状态都将变为 Canceled。
△ 您可以取消任何正在运行的 Worker
如果您的应用中包含像这样复杂的链式关系,那 Graph View 就会很有用。您能够在这个图中快速查看一组复杂的 Worker 之间的关系并监控它们的进展。
△ WorkManager 艺术展示 =)
如果您想用后台任务检查器尝试一些更复杂的图形或者制作一些 WorkManager 艺术,请参阅 DummyWorker 代码,并将其 加入到 continuation 对象 中。
后台任务检查器将会跟随 Android Studio Arctic Fox 的发布一同推出,但您现在就可以在 最新的 Arctic Fox 版本 中试用!如果您的应用使用了 WorkManager,请尝试使用并告诉我们您的想法,或者和我们分享您的 WorkManager 艺术!