在Gradle 插件中统计并打印 Task 任务耗时

2024-06-12 10:08

本文主要是介绍在Gradle 插件中统计并打印 Task 任务耗时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Gradle 插件中统计并打印 Task 任务耗时


我们在使用 Gradle 构建任务时,有时想统计每个任务的耗时情况,以此发现每个任务的运行时间,以及是否存在可优化空间。

使用 Listener 进行监听

Gradle 提供了很多构建生命周期钩子函数。

1. 我们可以用 TaskExecutionListener 来监听整个构建过程中 task 的执行:
public interface TaskExecutionListener {void beforeExecute(Task task);void afterExecute(Task task, TaskState taskState);
}

我们可以在每个 task 执行前先收集信息,记录该 task 执行的开始时间等,在 task 执行完成后,记录其执行结束时间,这样就能统计出该 task 的执行时长。

2. 使用 BuildListener 来监听整个构建是否完成,在构建完成后,输出所有执行过的 task 信息,以及每个 task 的执行时长:
public interface BuildListener {void buildStarted(Gradle gradle);void settingsEvaluated(Settings settings);void projectsLoaded(Gradle gradle);void projectsEvaluated(Gradle gradle);void buildFinished(BuildResult buildResult);
}

在 buildFinished 方法中,监听构建完成以及成功与否,并打印我们采集的耗时信息。

代码实例

BuildTimeListener 是我自定义的一个监听任务耗时的工具类:

class BuildTimeListener implements TaskExecutionListener, BuildListener {//用来记录 task 的执行时长信息Map<String, TaskTimeInfo> taskTimeMap = new HashMap<>()@Overridevoid buildStarted(Gradle gradle) {}@Overridevoid settingsEvaluated(Settings settings) {}@Overridevoid projectsLoaded(Gradle gradle) {}@Overridevoid projectsEvaluated(Gradle gradle) {}@Overridevoid buildFinished(BuildResult buildResult) {println "-----------------GouAPM----------------------"println "---------------------------------------"println "build finished, now println all task execution time:"taskTimeMap.each{ k, v -> println "${k}:[${v.total}ms]" }println "---------------------------------------"println "---------------------------------------"}@Overridevoid beforeExecute(Task task) {//task开始执行之前搜集task的信息TaskTimeInfo timeInfo = new TaskTimeInfo()timeInfo.start = System.currentTimeMillis()timeInfo.path = task.getPath()taskTimeMap.put(task.getPath(), timeInfo)}@Overridevoid afterExecute(Task task, TaskState taskState) {//task执行完之后,记录结束时的时间TaskTimeInfo timeInfo = taskTimeMap.get(task.getPath())timeInfo.end = System.currentTimeMillis()//计算该 task 的执行时长timeInfo.total = timeInfo.end - timeInfo.start}class TaskTimeInfo {//task执行总时长long totalString pathlong startlong end}
}

我们在自定义插件中进行注册:

class MyPlugin implements Plugin<Project>{private Project mProject;@Overridevoid apply(Project project) {mProject = project;//注册监听,以统计任务的耗时project.gradle.addListener(new BuildTimeListener())}
}

**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》
**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》
**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》

这篇关于在Gradle 插件中统计并打印 Task 任务耗时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053912

相关文章

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

SpringBoot中使用定时任务schedule详解

《SpringBoot中使用定时任务schedule详解》文章介绍了如何在Spring应用中使用@EnableScheduling注解启用定时任务,并创建一个配置类来定义定时任务的执行,文章还详细解释... 目录1、在spring启动类上添加注解@EnableScheduling2、创建定时任务配置类3、执

VS Code中的Python代码格式化插件示例讲解

《VSCode中的Python代码格式化插件示例讲解》在Java开发过程中,代码的规范性和可读性至关重要,一个团队中如果每个开发者的代码风格各异,会给代码的维护、审查和协作带来极大的困难,这篇文章主... 目录前言如何安装与配置使用建议与技巧如何选择总结前言在 VS Code 中,有几款非常出色的 pyt

win10安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优