性能优化第一步:Profiler的使用
CPU Profiler
首先来说,CPU Profiler并不是专门用于处理页面卡顿掉帧的,准确说:CPU Profiler是用来查看每个线程,在某段一段时间内执行了哪些函数,以及在其执行期间每个函数消耗的 CPU 资源。 专门针对卡顿掉帧问题可以使用内置的小工具:systrace。
不整官网那么多“花里胡哨”的介绍,咱们直击上应用方式。
1、使用界面
点击启动后,我们就可以看到如下的内容:
不得不吐槽,Profiler用起来是真的卡
红框圈住的内容,从上到下依次是:
- 当前运行的Activity
- CPU使用情况
- 内存使用情况
- 网络使用情况
我们点击一下CPU,就可以进一步的查看CPU的使用情况。
2、详细分析
这个图,表示了当前CPU的使用率,当然这个使用率对应了整个手机,并不能准确的反应我们自己app的真实情况。接下来咱们针对代码,来看一下具体的使用:
我在代码里做了什么呢?很简单,一个postdelay,然后里边做一个入参为40的递归菲波那切数列。
Handler().postDelayed({
fibonacci(40)
}, 20000)
接下让咱们看一下这个函数的耗时。
我们需要在我们认为合适的时机,点一下Record。
因为我这里是delay了20秒,所以我在17、8秒的时候Record
然后在一个合适的时机,再点一下Stop。
然后我们就会看到这样的结果:
这样我们就可以很清晰的看到这段时间内产生的函数调用关系。鼠标移到对应的函数,还可以看到对应的耗时。
因此我们可以将这段耗时函数移到异步去做,比如这样:
不要在意这疯狂的Thread使用方式,就是表达一下异步的这么个意思。哈哈~
Handler().postDelayed({
Thread {
fibonacci(40)
}.start()
}, 20000)
那么接下来,咱们在Record一下:
此时我们会发现,虽然我们的CPU使用率在上升,但是对于我们主线程来说并没有任何耗时操作(也就是第二个红框)。
如果我们下滑一下选项框,我们会发现,我们的耗时操作在这:
当我们点击它时,我们就可以看到这个线程的函数调用:
3、显示模式
细心的小伙伴可能注意到了:分析函数调用的时候有四个选项卡可供选择。
那它们都分别什么意思呢?这里简单的介绍一下:
Call Chart:
x轴表示函数调用(或调用方)的时间段和时间,并沿y轴显示其被调用者。 对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色。
示意图类似于这样:
Flame Chart:
俗称的火焰图。对于火焰图来说,它就是汇总了Call Chart,并按照调用顺序倒序排列,就像这样:
Top Down、Bottom Up:
这俩种模式相对比较复杂,大家可以参考官方文档的解释配合使用。
最后
如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。谢谢!
推荐阅读
-
性能优化第一步:Profiler的使用
-
全网最全的SQL性能优化,助你不再迷茫,步入人生巅峰
-
【J2EE性能分析篇】JVM参数对J2EE性能优化的影响 博客分类: JVM JVM性能分析
-
Linux系统监控:iostat 博客分类: Java性能优化 iostat磁盘使用率磁盘I/O使用率
-
开始练习使用MongoDB改善计数器系统的性能问题 博客分类: Java MongoDB
-
浏览器的加载与页面性能优化 博客分类: 技术总结 浏览器加载页面性能优化
-
php文件包含目录配置open_basedir的使用与性能详解
-
asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)
-
Yahoo!的 Exceptional Performance团队为改善 Web性能带来最佳实践。他们为此进行了一系!团队实践分享:网站性能优化的34条黄金守则 博客分类: javascript收藏
-
剖析Java中HashMap数据结构的源码及其性能优化