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

前言

最近申请了一个比较低端的测试机,而后惊讶的发现...咱们的app居然这么的卡...虽说app卡很烦,可是我又不用,关我啥事~ 不过做为一个德智体美劳全面发展的新时代程序员,仍是应该“象征性”的查一下问题。卡顿的出现无非是在主线程里边作了耗时操做,影响了主线程对UI的绘制,形成了卡顿的现象。 所以咱们只须要找到主线程中耗时的函数,而后对其进行异步处理便可解决问题。 因此今天我们聊一聊AndroidStudio中检查函数耗时的工具:CPU Profilerhtml

固然你们也能够直接参考官方文档:developer.android.google.cn/studio/prof…android

CPU Profiler

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

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

一、使用界面

点击启动后,咱们就能够看到以下的内容:网络

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

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

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

咱们点击一下CPU,就能够进一步的查看CPU的使用状况。函数

二、详细分析

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

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

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

复制代码

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

咱们须要在咱们认为合适的时机,点一下Record

由于我这里是delay了20秒,因此我在1七、8秒的时候Record

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

而后咱们就会看到这样的结果:

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

所以咱们能够将这段耗时函数移到异步去作,好比这样:

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

Handler().postDelayed({
    Thread {
        fibonacci(40)
    }.start()
}, 20000)
复制代码

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

此时咱们会发现,虽然咱们的CPU使用率在上升,可是对于咱们主线程来讲并无任何耗时操做(也就是第二个红框)。

若是咱们下滑一下选项框,咱们会发现,咱们的耗时操做在这:

当咱们点击它时,咱们就能够看到这个线程的函数调用:

三、显示模式

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

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

Call Chart:

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

示意图相似于这样:

Flame Chart

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

Top Down、Bottom Up

这俩种模式相对比较复杂,你们能够参考官方文档的解释配合使用。

尾声

这篇文章就是我想聊的内容,就是很简单很简单的工具应用。可是它表明了你踏出性能优化的第一步,踏出第一步将意味着,后面将有一个又一个坑等着你。

来吧,既然选择了远方,便只顾风雨兼程!

我是一个应届生,最近和朋友们维护了一个公众号,内容是咱们在从应届生过渡到开发这一路所踩过的坑,以及咱们一步步学习的记录,若是感兴趣的朋友能够关注一下,一同加油~

我的公众号:咸鱼正翻身
相关文章
相关标签/搜索