Android Profiler(一)CPU Profiler

总述

Android Profiler 提供了四种工具,分别对 CPU、内存、流量、电量进行监测,本系列将分别讲解这四种工具:CPU Profiler、Memory Profiler、Network Profiler 和 Energy Profiler。

本文基于 Android Studio 3.6.3,Android 9.0。主旨在 CPU Profiler 快速入门,更多细节可以参考官方文档。

通过 CPU Profiler 查看 CPU 的运行情况,可以找出 CPU 占用率高、耗时长的函数,以便定向优化项目。

基础说明

打开 CPU Profiler

1.点击工具栏中的 Profiler 图标。

2.点击 CPU 时间轴上的任意位置以打开 CPU Profiler。

基础图示说明

基础图示说明.png

1.事件时间轴

显示 Activity 生命周期的不同状态、以及用户的交互事件,如点击。

2.CPU 时间轴

显示 CPU 实时占用率。其中绿色块表示的才是应用自身的 CPU 占用,灰色块表示的是其他应用的 CPU 占用,白色虚线表示的是应用当前的线程总数。

3.线程活动时间轴

每一行表示一个线程,列出了应用程序的每个线程、以及它们的活动情况。

绿色:活动中或准备使用 CPU;
黄色:活动中,但在等待 I/O。
灰色:休眠。

实战

应用运行中使用 CPU Profiler

为了说明 CPU Profiler 的用法,这里写了个简单的 Demo。

package com.dixon.profiledemo;

import ...

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void startAty(View view) {
        CatonUtils.caton();
        startActivity(new Intent(MainActivity.this, SecondActivity.class));
    }
}

在启动 SecondActivity() 之前,调用了 CatonUtils.caton() 函数,它是我手写的耗时方法,代码如下:

public class CatonUtils {

    // 仅仅是模拟耗时计算 可以随意替换
    public static void caton() {
        long sum = 0;
        for (long i = 0; i <= Integer.MAX_VALUE / 4; i++) {
            sum += i;
        }
    }
}

也就是说在启动新的 Activity 之前,它会因耗时操作而导致启动过程卡顿。

我们的目标就是:通过 CPU Profiler,找到卡顿点是 CatonUtils.caton() 这个函数。

步骤

1.开始测试卡顿点前,点击 Record。

Record

2.执行卡顿场景。放在本例中,就是点击跳转按钮(调用 startAty())。

3.点击 stopRecord。

这样我们就拿到了卡顿期间的数据,此时界面如下。

卡顿数据

分析

1.CPU 时间轴

可以明显看到时刻内 CPU 在占用率很高的情况下维持了很长一段时间。

2.THREADS 栏

选中卡顿线程,本例中为主线程,以包名命名。

将鼠标拖动到 THREADS 一栏的绿色方块上,可以看到函数耗时。

3.Call Chart

Call Chart 以图形的方式呈现方法跟踪数据。

其中:

橙色:系统 API 调用;
绿色:应用自有方法;
蓝色:第三方、包括 Java 语言 API 调用。

由于函数由上至下层层调用,因此通过判断自有函数间的长度间距,即可判断耗时长短。

在本例中,com.dixon.profiledem.CatonUtils.caton() 为最后执行的函数,它的耗时时间最长,此时使用 右键 - jump to source 即可定位到耗时代码。

4.Top Down

Top Down 同样由上至下列出了函数调用列表,通过 Total 可以轻松的定位出耗时函数。

应用启动时使用 CPU Profiler

上述点选 Record 按钮的方式只能在应用进程启动后,如果我们想优化应用的 启动耗时,则需要另外的方式。

  1. 依次选择 Run > Edit Configurations。
  2. 在 Profiling 标签中,勾选 Start recording CPU activity on startup,点击 Apply。
  3. 选择 Run > Profile。
  4. 完全启动后,点击 stop Record,出现结果数据,使用上述分析方式分析即可。

其它

CPU Profiler 还有其它使用方式,如导出导入 CPU Profiler 分析数据、检查帧渲染数据等等,详情查看 官方文档,本文只说明 CPU Profiler 开发过程中的常见用法。

上述示例演示了大量计算导致的应用卡顿,同样,内存占用过高、导致频繁 GC 同样会导致应用卡顿,下节将使用 Memory Profiler 定位内存问题。

下节 Android Profiler(二)Memory Profiler

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 低性能的APP常见的表现有启动/界面切换慢、动画掉帧、卡顿、耗电,甚至出现应用无响应、程序崩溃的现象。当我们着手解...
    都有米阅读 23,176评论 8 50
  • 应用开发过程中大部分时间都是在进行需求开发,而性能分析却进行的很少。这里将介绍通过CPU Profiler工具来...
    yanlong107阅读 1,214评论 0 0
  • 首先,我们回顾一下TraceView。 TraceView 是Android SDK自带的工具,用来分析函数调用过...
    perry_Fan阅读 2,816评论 0 17
  • 1、前言 很多时候在使用APP的时候,手机可能会发热发烫。这是因为CPU使用率过高,CPU过于繁忙,会使整个手机无...
    羽墨_99e8阅读 3,034评论 0 5
  • 每个人都有梦,一份属于自己的,天真而又幼稚的梦,梦的形式有很多种,而我的梦是你。————题记 回想过去,展望未来,...
    穆子听风吟阅读 209评论 0 0