本文主要是介绍在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 任务耗时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!