在构造函数,修复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. delphi webbrowser 经常使用的演示样本

    var Form : IHTMLFormElement ; D:IHTMLDocument2 ; begin with WebBrowser1 do begin D := Document as IH ...

  2. IOS_多线程_ASI_AFN_UIWebView

    H:/0730/00_多线程4票种_ViewController.h // // ViewController.h // 卖票 // // Created by apple on 13-7-29. / ...

  3. [TWRP 2.8.4 ] 小米 3W 中文-英文版本 twrp

    经过半个小时的代码修改,从 2.7.0 移植到 2.8.4 的源代码上. 汉化操作是使用切换语言选项来实现的. 注意: 此版本的 twrp 还不支持双系统切换功能. 作者:laser杨万荣 如果需要转 ...

  4. 自己写的sql排序

    create function dbo.Fn_Sort (  @str varchar(1024) ) returns nvarchar(100) as begin declare @tb table ...

  5. UVa 572 Oil Deposits(DFS)

     Oil Deposits  The GeoSurvComp geologic survey company is responsible for detecting underground oil ...

  6. 5月,专用程序猿的经典大作——APUE

    五一小长假刚刚过去,收回我们游走的心.開始你们的读书旅程吧! 本期特别推荐 经典UNIX著作最新版. 20多年来,这本书帮助几代程序猿写出强大.高性能.可靠的代码. 第3版依据当今主流系统进行更新,更 ...

  7. AND信号灯和信号灯集-----同步和互斥解决面向对象(两)

    AND信号 互斥的上述处理,它是针对仅在进程之间共享的一个关键资源方面.在一些应用.这是一个过程,需要在为了自己的使命后,获得两个或多个其他共享资源运行. 个进程A和B.他们都要求訪问共享数据D和E. ...

  8. C++ primer札记10-继承

    包.继承,多态性C++的三个基本概念,在这里,我们重点总结继承的东西 1 类派生列表 类派生列表中指定一个派生类继承基类,来自列表与一个或多个基类如: class B : public A1,prot ...

  9. TCP/IP 网络精讲:OSI七层模型(第二课)

    内容简介 1.前言 2.第一部分第二课:互联网的创立,OSI七层模型 3.第一部分第三课预告:OSI第一层,连接你的机器 前言 PS:昨天做了课程大纲之后,发现这个坑挖得有点大.不过既然挖了,岂有不跳 ...

  10. Caused by: org.springframework.beans.factory.BeanCreationException

    1.错误原因 2014-7-13 17:36:57 org.apache.jasper.compiler.TldLocationsCache tldScanJar 信息: At least one J ...