在构造函数,修复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. android studio学习

    http://blog.csdn.net/ryantang03/article/details/8948037 http://www.it165.net/pro/html/201109/676.htm ...

  2. hdoj 2102 A计画 【BFS】

    称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...

  3. 【原创】leetCodeOj --- Intersection of Two Linked Lists 解题报告(经典的相交链表找交点)

    题目地址: https://oj.leetcode.com/problems/intersection-of-two-linked-lists/ 题目内容: Write a program to fi ...

  4. Ognl底层使用

    今天,在得知ognl采用.在这里和大家分享一下.我希望能帮助. package com.hcj.test; import java.util.ArrayList; import java.util.L ...

  5. HDU 1885 Key Task 国家压缩+搜索

    点击打开链接 Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Windows下Git服务器搭建[转]

    Windows下Git服务器搭建   作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 ...

  7. Spring HTTPInvoker原理猜想(HTTP+序列化)

    没有查看源码,仅作参考 实现步骤: 一,客户端 (1),远程调用信息封装为远程调用对象 (2),序列化写入到远程调用HTTP请求中 (3),向服务器发送 (4),服务器端返回的HTTP响应结果 (5) ...

  8. eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素

    Console报错: sdk\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type.2.4.d: ...

  9. redis client protocol 分解

    在官方网站http://redis.io/topics/protocol我们必须redis通信协议做说明. 根据以下某些原因.我想解决redis client protocol: 1.足够了解通信协议 ...

  10. JAVA学习篇--JAVA两种编程模式控制

    在Drp项目中,解说了两种编程模式Model 1和Model2.以下是对这两种模式的简单理解.以及因为Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对照学习一下. ...