GT3.1 简化您的App性能测试(3)——原理讲解,溯本求源续

导读

在上一章的内容中,GT君为大家介绍了CPU、内存、流量、流畅度等不同维度检测的实现原理。在本章中GT君将继续从页面启动时长维度、布局的构建与绘制维度、数据库操作维度为大家讲解这些功能的作用和实现原理。

1 页面启动时长检测

1.1 页面启动时长

Activity启动时长就是唤醒Activityy到Activity在前台进行第一次绘制的时间,配合“绘帧检测”中定位的掉帧区间,可以直观的展示卡顿问题。

Fragment启动时长就是唤醒Fragment到Fragment执行onResume的完成时间。

1.2 实现原理

对Activity和Fragment生命周期的监控: Android 4.0以上的版本可以利用ActivityLifecycleCallbacks来实现对生命周期的监听,但此方法无法得到每个生命周期函数的执行时长。因此我们采用Hook的方式来监控Activity和Fragment的生命周期,这里介绍一下最佳Hook节点:

Activity最佳Hook节点:

Fragment最佳Hook节点:

关于数据的整理:我们都知道,页面分为冷启动和热启动(页面从startActivity开始则是冷启动,如果从onStart或onResume开始,则是热启动),我们可以维护一个页面列表pageList,然后通过hashCode和生命周期函数的执行时间来归类数据,并可以对页面的冷热启动进行分析。

页面开始启动我们知道了,那么什么时候才算是页面启动结束呢?

事实上页面从开始到绘制完第一帧的这个时间,既是页面从启动开始到结束的所有时间。而对View绘制的监控,只需要Hook ViewGroup的dispatchDraw方法即可。

但由于ViewGroup的执行是递归的,所以我们发明了一种递归压栈归类法(将当前绘制节点进行压栈和弹栈操作),而且通过最大栈深可以得知View的绘制深度。

直到dispatchDraw的栈深弹光,就说明一次绘制完成了。

2 布局检测

2.1 View构建时长

View构建是通过调用Inflate函数实现的,setContentView的原理也是通过Inflate函数构建View,这里介绍一下最佳Hook节点:

Hook数据的结果:

2.2 View绘制深度

通过我们上文提到的递归压栈归类法(将当前绘制节点进行压栈和弹栈操作),而且通过最大栈深就可以得知View的绘制深度:

其次是将viewDraw信息匹配给Activity:

3 DB检测

对于数据库的检测方面,Hook的关键函数为android.database.sqlite.SQLiteDatabase包下的方法:

DB检测分析截图如下:

结语

文章至此,GT3.1版本的大部分更新的功能及原理已经介绍完毕。总而言之,新版本的GT在测试移动应用的维度方面更加全面,统计分析的数据专业可靠,能够让大家完全了解自己的应用,锁定优化范围,进一步提升效率。在之后的版本更新中,我们团队也将尽力为大家带来更好更便利的更新。

全文终!

项目开源地址:

https://github.com/Tencent/GT

您还有什么好的建议,可以在下方给我们留言,感谢。

版权所属,禁止转载!

原文发布于微信公众号 - 腾讯移动品质中心TMQ(gh_2052d3e8c27d)

原文发表时间:2018-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐百川的学习频道

用Anaconda安装TensorFlow

一说起现在比较火的机器学习、深度学习之类的,不得不说的一定有谷歌的TensorFlow框架。关于TensorFlow我就不多说了,因为我对这个东西也不太了解,这...

29210
来自专栏编程

无数据库权限下载文献攻略大全

阅读完本篇文章你就会学会了在家里,在路上,在可以连接到网络的任何地点都轻松下载您所需要的文献!!! 在之前的内容中,我们为大家推送过两篇关于如何在没有权限的情况...

2358
来自专栏玉树芝兰

如何用Markdown写论文?

本文用简明的样例,介绍如何使用Markdown和自动化工具帮你处理数学公式、参考文献引用、图片交叉索引等学术论文写作中常见的棘手问题。快来试试吧。

4362
来自专栏程序员互动联盟

【Android基础】Activity生命周期

前言: 在网站开通以来一直想着写一些Android基础知识分享给大家,但是有时候又觉得怕写不好误导了大家学习Android,思前想后觉得还是去Android官...

3635
来自专栏Golang语言社区

转-Golang语言-里面select-case和time.Ticker的使用注意事项

上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.Ticker的使用注意事项(真实的应用场景是:在测试收包的顺序的时候,加了个t...

39811
来自专栏上善若水

053[转]Android开发中如何匹配layout资源(layout-sw480dp layout-sw600dp-land layout-sw720dp-port)

ps : 很不错的文章,今天正好遇到类似问题,看到这篇文章,很顺利的找到了出错的layout。感谢一下

1582
来自专栏机器学习养成记

ggplot2主题模板:ggthemr

ggplot2提供了强大的可视化能力,通过修改theme,可以实现各种精美图表。但是想绘制出好看的图表不仅需要强大的工具,还需要个人的审美、配色等能力,ggth...

43210
来自专栏云+创业计划

如何用腾讯云打造一款微视频 APP

本文主要讲解了如何将腾讯云提供的音视频上传下载、万象优图图片存储以及处理(缩放、裁剪、水印)等功能集成到了APP和业务端服务器中,打造一款微视频APP。

2.3K1
来自专栏GIS讲堂

wms常用操作

自从换了工作就很少有时间上网了,新的单位不让上网的,所以博客也有好久没有更新了,虽然博文的质量一般般吧,但是觉得还是坚持写下去比较好,今天,北京,雨天,写点最近...

2004
来自专栏图像识别与深度学习

《HTML5实战》Lesson03

Week03     2016/09/28上午1-4节 一、复习上节课内容: 二、自己完成登陆明细部分P43:代码清单2-3 1,<fieldset>、<leg...

3785

扫码关注云+社区

领取腾讯云代金券