欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

性能优化第一步:Profiler的使用

程序员文章站 2024-03-19 16:25:10
...

CPU Profiler

首先来说,CPU Profiler并不是专门用于处理页面卡顿掉帧的,准确说:CPU Profiler是用来查看每个线程,在某段一段时间内执行了哪些函数,以及在其执行期间每个函数消耗的 CPU 资源。 专门针对卡顿掉帧问题可以使用内置的小工具:systrace

不整官网那么多“花里胡哨”的介绍,咱们直击上应用方式。

1、使用界面

性能优化第一步:Profiler的使用

 

点击启动后,我们就可以看到如下的内容:

不得不吐槽,Profiler用起来是真的卡

性能优化第一步:Profiler的使用

 

红框圈住的内容,从上到下依次是:

  • 当前运行的Activity
  • CPU使用情况
  • 内存使用情况
  • 网络使用情况

我们点击一下CPU,就可以进一步的查看CPU的使用情况。

2、详细分析

性能优化第一步:Profiler的使用

 

这个图,表示了当前CPU的使用率,当然这个使用率对应了整个手机,并不能准确的反应我们自己app的真实情况。接下来咱们针对代码,来看一下具体的使用:

我在代码里做了什么呢?很简单,一个postdelay,然后里边做一个入参为40的递归菲波那切数列。

Handler().postDelayed({
    fibonacci(40)
}, 20000)

接下让咱们看一下这个函数的耗时。

我们需要在我们认为合适的时机,点一下Record

因为我这里是delay了20秒,所以我在17、8秒的时候Record

性能优化第一步:Profiler的使用

 

然后在一个合适的时机,再点一下Stop

性能优化第一步:Profiler的使用

 

然后我们就会看到这样的结果:

性能优化第一步:Profiler的使用

 

这样我们就可以很清晰的看到这段时间内产生的函数调用关系。鼠标移到对应的函数,还可以看到对应的耗时。

因此我们可以将这段耗时函数移到异步去做,比如这样:

不要在意这疯狂的Thread使用方式,就是表达一下异步的这么个意思。哈哈~

Handler().postDelayed({
    Thread {
        fibonacci(40)
    }.start()
}, 20000)

那么接下来,咱们在Record一下:

性能优化第一步:Profiler的使用

 

此时我们会发现,虽然我们的CPU使用率在上升,但是对于我们主线程来说并没有任何耗时操作(也就是第二个红框)。

如果我们下滑一下选项框,我们会发现,我们的耗时操作在这:

性能优化第一步:Profiler的使用

 

当我们点击它时,我们就可以看到这个线程的函数调用:

性能优化第一步:Profiler的使用

 

3、显示模式

细心的小伙伴可能注意到了:分析函数调用的时候有四个选项卡可供选择。

性能优化第一步:Profiler的使用

 

那它们都分别什么意思呢?这里简单的介绍一下:

Call Chart:

x轴表示函数调用(或调用方)的时间段和时间,并沿y轴显示其被调用者。 对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色

示意图类似于这样:

性能优化第一步:Profiler的使用

 

 

Flame Chart

俗称的火焰图。对于火焰图来说,它就是汇总了Call Chart,并按照调用顺序倒序排列,就像这样:

 

性能优化第一步:Profiler的使用

 

Top Down、Bottom Up

这俩种模式相对比较复杂,大家可以参考官方文档的解释配合使用。

最后

如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。谢谢!
性能优化第一步:Profiler的使用

相关标签: Android