在构造函数,修复bug。完成代码后,你应该花一些时间来专注于应用性能。应用视频像素和运行的运行速度和流畅度影响用户体验。

        Android应用执行在一个共享资源的环境中,你的应用的性能会被与其交互的系统资源的效率所影响。应用也执行在一个多线程的环境中,与其他拥有线程的进程争夺资源,可能会引起非常难诊断的性能问题。

Systrace工具同意你收集和审查应用和Android系统的代码运行数据。你能够使用这些数据诊断运行中的问题以提升应用的性能。

  • 概述

Systrace帮助你分析应用程序运行是怎么融入更大的Android系统的,让你在公共时间轴上看到系统和应用进程的运行。这个工具同意你在4.1或者更高的版本号生成更加具体的。可互动的报告。比方下图1的报告。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuZmFueGlhb3p1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

                 应用进程执行5s后的Systrace报告
  • 生成Traces

为了创建应用的trace文件,你必须执行一系列的操作,首先。要有一个执行了Android 4.1或者更高版本号的设备,设置设备同意调试,连接到开发系统,装上应用。

一些类型的trace信息,特别是磁盘活动和内核工作队列。须要你有root权限,可是。大部分trace数据之须要设备同意开发人员调试。

Systrace 能够通过命令行和用户界面启动,本向导主要讲通过命令行的方法。

  • 限制trace数据

Systrace工具能够生成应用和系统的潜在的巨大数据,为了限制工具收集的数据量,使数据与分析相关,使用以下的选项:

    1.限制trace抓取的时间使用-t。--time选项,默认的trace时长是5s

    2.限制trace抓取数据的size使用-b,--buf-size选项

    3.指定哪些类型的进程被跟踪。能够被跟踪的进程在不同的Android版本号上面略有不同:

      Android4.2和低于4.2的:使用--set-tags选项和--disk,--cpu-freq,--cpu-idle,--cpu-load选项

      Android4.3和高于4.3的:使用--list-categories选项来查看类型列表

  • 在4.3和大于4.3的版本号抓取trace信息

1.确保设备通过usb调试选项打开,并成功连接到电脑

     2.指定要抓取的选项来运行trace。比如

           $ cd android-sdk/platform-tools/systrace

           $ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

     3.在设备上。运行不论什么你想要被包括进trace信息的操作

  • 在4.2和低于4.2的版本号抓取trace信息

在4.2和低于4.2的设备上面使用trace,为了提高效率,你必须在抓取之前配置想要跟踪的进程类型。工具能够收集以下进程类型的信息:

      1.通常的系统进程,比方graphics。audio和input进程(使用trace category tags选择)

      2.低级别的系统信息,比方CPU,kernel和磁盘活动(使用options选择)

使用以下的命令设置Systrace的tags:

1.使用--set-tags选项:

$ cd android-sdk/platform-tools/systrace

$ python systrace.py --set-tags=gfx,view,wm

2.重新启动adb使这些进程跟踪生效

$ adb shell stop

$ adb shell start

当你配置完trace的category tags,就能够開始收集信息来进行分析。

 使用如今的trace tag设置来执行trace:

1.确保设备adb连接成功

2.运行trace并设定低级别的trace选项,限定选项等

$ python systrace.py --cpu-freq --cpu-load --time=10 -o mytracefile.html

                   3.在设备上,运行不论什么你想要被包括进trace信息的操作

  • 跟踪应用代码

Systrace工具能够跟踪应用代码的运行,在4.3或者更高的版本号。你能够使用Trace类的方法来加入标志到应用的代码。然后在Systrace报告中查看结果。

以下的代码显示了怎么使用Trace类来跟踪应用方法的运行,包含两个嵌套的代码块。

public void ProcessPeople() {

Trace.beginSection("ProcessPeople");

try {

Trace.beginSection("Processing Jane");

try {

// code for Jane task...

} finally {

Trace.endSection(); // ends "Processing Jane"

}

Trace.beginSection("Processing John");

try {

// code for John task...

} finally {

Trace.endSection(); // ends "Processing John"

}

} finally {

Trace.endSection(); // ends "ProcessPeople"

}

}

当trace方法嵌套时,endSection()方法结束近期的beginSection(String)方法。

这意味这一个在其它trace中開始的trace。不可能超过外围trace的结束位置,所以要确保開始和结束方法的位置在想要測试的进程中是合适的。

        Traces必须在同一个线程中调用begin和end方法,不能在一个线程中调用begin,而在还有一个线程中调用end。

        当使用应用级别的跟踪时,必须在用户界面设置应用的包名或者使用-a,--app=选项

  • 分析Traces

当使用Systrace工具生成trace后。它列出了输出文件的位置,你能够打开使用web浏览器打开报告。

怎么使用trace收集的数据依赖与你要分析的性能问题。可是本章提供了一些通用的分析trace的方法。

        Systrace生成的报告是可交互的。同意你放大缩小察看进程运行的细节。W键放大,S键缩小。A键往左移,D键往右移。

在时间轴上面选择一个任务。使用鼠标来获取这个任务很多其它的信息。

长时间执行的进程

        一个良好的应用程序迅速并且有规律地运行很多细小的操作,一些操作的几毫秒内完毕,依据进程所在的设备有所不同,就在图2显示的

图2的trace显示了一个执行良好的应用进程有一个有规律的节奏(1),图2以下的区域放大了虚线圈起来部分,它显示了在执行过程中的一些不规则。

特别是,2标记的一个略微宽一点的task条。花费了略微长一点的时间(14ms),相比其它的。线程里相似的任务,平均在9到12毫秒就能够完毕。这个特殊的任务执行的时长貌似没有被用户注意到,除非它在特殊的时间影响还有一个进程,比方屏幕更新。

        长时间执行的进程假设有一些bars比正常执行的bars宽,说明你的应用中有性能问题。

当trace中出现这个问题时。点击引起问题的task获取更加具体的信息,你也应该关注同一时间执行的其它进程,寻找被其它进程堵塞的进程中的线程。

  • 显示运行中断

Systrace工具分析应用显示慢或者动画停止是很实用的,由于它显示了应用在多个系统进程中的运行。对于显示的运行。有规律节奏地绘制屏幕帧是良好的性能不能缺少的。有节奏规律地显示确保了屏幕上动画和移动的平滑。假设应用退出了这个节奏。从用户方面来看,显示会变得卡顿或者慢。

假设你正在分析应用这样的类型的问题,检查Systrace报告中应用程序运行的SurfaceFlinger进程,来寻找退出有规律节奏的位置。

图3 显示处理中断

图3显示了显示中断的区域。这个区域在SurfaceFlinger进程中,图示中的(1)位置。表明了显示帧的丢失。丢帧可能会导致显示卡顿或停止。进入下方trace的问题区域,显示了surfaceFlinger进程的内存操作花费时间过长。这个延时导致了应用widows显示的丢失。

作为这个应用的开发人员,你应该检查应用中的其它线程是否在同一时间尝试分配内存或者其它的请求和任务堵塞了内存分配。

SurfaceFlinger进程有规律节奏地运行是屏幕内容显示平滑的必要条件。特别是对动画和移动来说。线程中常规运行被中断并不一定意味着该问题是应用程序,从需要进一步的测试的用户的角度,以确定是否性能问题。能识别正常显示操作信息可以帮助您检测显示问题,平稳运行的构建,高性能应用。

当使用Systrace分析显示问题。请确保您设置Graphics和Views tag。

Systrace的更多相关文章

  1. Android性能优化之Systrace工具介绍(一) _&& Systrace生成的trace.html打开空白或者打不开的解决办法

    1.必须用Chrome打开 2.在mac电脑上,可能Chrome打开也是空白,解决办法是:在chrome地址栏中输入”chrome:tracing”,然后点击load按钮load你的trace.htm ...

  2. 使用Systrace分析UI性能

    开发应用的时候,应该检查它是否有流畅的用户体验,即60fps的帧率.如果由于某种原因丢帧,我们首先要做的就是知道系统在做什么(造成丢帧的原因). Systrace允许你监视和跟踪Android系统的行 ...

  3. Analyzing UI Performance with Systrace 使用systrace工具分析ui性能

    While developing your application, you should check that user interactions are buttery smooth, runni ...

  4. 【工利其器】必会工具之(三)systrace篇(1)官网翻译

    前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...

  5. 【工利其器】必会工具之(三)systrace篇(2)

    systrace工具打开路径 以AndroidStudio(后面简写为AS),在顶部菜单栏中 Tools>Android>Android Device Monitor 打开后看到如下界面, ...

  6. Android性能优化工具之Systrace

    本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tui ...

  7. App优化 Systrace

    简介 trace [tres] vt.跟踪,追踪; 追溯,探索; 探索; 查找; n.痕迹; 痕迹,踪迹; 微量,极少量; 1 1   1 trace [tres] vt.跟踪,追踪; 追溯,探索; ...

  8. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  9. Android性能分析Systrace工具

    一.概述 保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态.当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测Andro ...

随机推荐

  1. 如何自动以管理员身份运行.NET程序?

    原文:如何自动以管理员身份运行.NET程序? windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身 ...

  2. 安卓反汇编工具arm-eabi-objdump

    安卓反汇编工具 在Arm平台系统自带的反编译工具在android/prebuild/linux-/toolchail/arm-abil-/bin目录下的arm_eabi-objdump进行反汇编 ar ...

  3. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

    全系列Index: [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一) [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二) [原创]只学到二维数组和结构体,不用链表也能 ...

  4. Sails.js中文文档

    Sails.js中文文档   http://sailsdoc.swift.ren/ Sails.js是一个Web框架,可以于轻松构建自定义,企业级Node.js Apps.它在设计上类似于像Ruby ...

  5. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  6. EL字符串表达式和常用功能用途拦截

    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> ${wj ...

  7. cocos2d-x v3.2 FlappyBird 各个类对象详细代码分析(6)

    今天我们要讲三个类,这三个类应该算比較简单的 HelpLayer类 NumberLayer类 GetLocalScore类 HelpLayer类,主要放了两个图形精灵上去,一个是游戏的名字,一个是提示 ...

  8. 使用bootbox.js(二级务必提交书面和数字到数字中国)

    页面文件 <#-- 页头 --> <#assign currNav = "deposit"> <#assign title="网校充值&qu ...

  9. 什么是Cyclomatic Complexity(圈复杂度)?

    Campwood Software SourceMonitor Version 3.5 The freeware program SourceMonitor lets you see inside y ...

  10. JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...