记录一次使用 Android Profiler分析CPU耗时操作

版权声明:本文章原创于 RamboPan ,未经允许,请勿转载。

记录一次使用 Android Profiler 分析内存

最近一个老项目需要更新,就想着把之前搜集的一些小问题一起修复了,然后测试了下,发现了一个情况,就是在查看历史数据模块的时候,进入比进入其他模块时间稍微长一点,想着优化下。

在这里插入图片描述

点击可能有点暗,gif 上看不出来,我点击的时候水波触发暂停,还是能感觉间隔有点长。

看代码前怀疑是不是读数据库时有点缓慢,在代码中加入日志观察,发现读数据库并不缓慢,在大量代码中如何快速查找可能耗时的部分呢,想到了之前 ASProfiler 可以查看内存的情况,当时也有一些其他参数,甚至在 8.0 上的系统也支持电量查看,那么此时我们就可以试试这个好用不。

一般会自动出现在常用的工具栏附近,可以看到是一个类似仪表指针的图标,没有的话,可以在上方菜单栏中查找。

点击之后将程序跑起来,下方菜单栏会出现 Profier 对话框,依次是 CPUMemoryNetworkEnergy,显示需要查看的几个选项,这里我们选择 CPU在这里插入图片描述
在这里插入图片描述
这里会显示线程有关的,但是我们重点不是观察线程,是查看点击之后进行了哪些操作导致时间花费比较高,所以等程序进入主界面一会后,CPU 慢慢稳定之后,点击 Record ,再点击我们要测试的模块,进入模块之后再点击一次 Record 位置(此时显示为 Stop),那么就会得出一段分析的区间。
在这里插入图片描述在这里插入图片描述
可以看到这种时间段,从上到下依次是调用的方法以及层级关系。

  • 橙色部分是 Android 系统的方法。
  • 蓝色部分是 Java 的方法。
  • 绿色部分是我们的代码。

比如沿着左边的分支可以看到显示 Android 的方法调用,触发了 java.lang.reflect.Method.invoke,再回到 Android 的代码调用最后走到我们的代码,因为 getLocalDate 中涉及一些数据处理,实现部分也是 AndroidJava 的代码,所以最后末端变成橙色和蓝色的时间小块。

在这里插入图片描述
我们重点观察是图中绿色部分,特别是整块的绿色。图中能看到的有我们类的 onCreate 方法,中间一整块部分下方也有我们的方法,只是此处没有截取到。

图中的包名部分因为显示区间太小,所以没有完全显示出来,这里可以滑动滚轮将时间精度放大,也可以把鼠标移上去可以看到显示的,那我们先来找一找这个方法有没有。
在这里插入图片描述
可以看到确实是能找到我们对应的方法,但是检查了下这里面代码,里面时间优化的空间不大,那我们看有没有其他大的耗时部分,我们把界面往下拉一下。
在这里插入图片描述
可以看到这里有几个词语反复出现,感觉真相可能在这,我们放大来看一看。
在这里插入图片描述
移到对应的时间块上可以显示出时间,此时的缩放比例,我标出了一个图中方块的单位是 50ms ,可以发现中间有很多重复的调用,每个都是 50ms 左右或者更长,我看大概算了这几个绿色部分花了 1 .1 秒(流下了心痛的泪水),看来就是真凶没错,那我们按着这些方法来看一下问题出在哪了。
在这里插入图片描述
按着上图的指示,我们来查找这五个方法。首先是 instantiateItem ,再是 applyDataToView
在这里插入图片描述
接下来找剩下三个方法。
在这里插入图片描述
查看三处的代码。
在这里插入图片描述
在这里插入图片描述
可以看到一个共同的特点,都是在实现获得一个时间戳的字符串形式或者其中的部分。

先不说是否耗时,就逻辑上来说:如果需要反复用,在类里面加一个字符串的时间戳变量就行了,在保存 long 类型时间时,同时解出一个 String 类型的时间戳保存下来。

这还不是最气的,打开 DateUtils.dateToString() 这个方法。
在这里插入图片描述
这 …… 既然做成了静态的工具类,直接存一个静态的变量呀 …… 前人挖坑,后人踩坑。🙃


更详细的使用可以参考以下的链接 (需要科学上网)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 的 Profiler 是一个强大的性能分析工具,可以帮助开发人员监测和分析应用程序的性能表现。它提供了一系列工具和功能,包括实时监控应用程序的 CPU、内存、网络和电池使用情况,以及方法执行时间和调用关系的跟踪等。 要使用 Profiler,可以按照以下步骤操作: 1. 打开 Android Studio,并确保你的项目已加载。 2. 在 Android Studio 的底部工具栏中,点击 "Profiler" 选项卡。如果找不到该选项卡,可以通过点击右上角的 "Configure Profilers" 图标来启用它。 3. 在 Profiler 窗口中,你可以选择要监控的设备和应用程序。选择你想要分析的设备,并从下拉菜单中选择你的应用程序。 4. 选择你感兴趣的性能指标,如 CPU、内存、网络和电池等。你可以点击对应的选项卡来查看实时数据图表,以及更详细的性能分析结果。 5. 如果你想跟踪方法执行时间和调用关系,可以点击 "Profiler" 选项卡中的 "Record" 按钮,开始记录方法追踪信息。然后,在应用程序中进行一些操作Profiler记录下方法的执行时间和调用关系。 使用 Profiler 的主要作用包括: - 监测应用程序的性能表现,如 CPU 使用率、内存占用、网络请求和电池消耗等。 - 分析应用程序的性能瓶颈和耗时操作,帮助开发人员找出性能问题并进行优化。 - 跟踪方法的执行时间和调用关系,帮助开发人员了解代码的执行流程和性能瓶颈。 - 提供实时数据图表和分析结果,使开发人员能够更直观地了解应用程序的性能情况。 通过使用 Profiler,开发人员可以深入了解应用程序的性能特征,从而优化代码并提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值