使用TraceView调试并提高Android应用性能

TraceView是android的一个可视化的调试工具。借助它,你可以具体了解你的代码在运行时的性能表现。它能帮你更好了解到代码运行过程的效率,进而改善代码,提高你应用的体验。

在用TraceView工具之前,你需要先生成TraceView日志文件,文件包含了应用的跟踪的相关信息,然后再用TraceView工具对文件进行分析。

生成Trace日志的两种方法

代码方式

在代码中使用Debug类来跟生成日志文件,调用startMethodTracing()方法开始跟踪,调用stopMethodTracing()方法来结束跟踪。用代码生成日志好处是你可以很精确地控制跟踪的范围,因为你可以自己设置开始与结束跟踪的位置。

使用该种方式生成文件,要注意:

需要在AndroidManifest文件中添加下面权限READ_EXTERNAL_STORAGE,允许你的应用对外存储空间进行写操作。

下面是使用的Debug类来生成日志的一个示例:

    // start tracing to "/sdcard/calc.trace"
    Debug.startMethodTracing("calc");
    // ...
    // stop tracing
    Debug.stopMethodTracing();

比如说,你可以在onCreate()里调用startMethodTracing()来开始跟踪,在onDestroy()方法里使用stopMethodTracing()来结束跟踪。

调用startMethodTracing(“calc”),系统就会将跟踪文件指定名字命为calc。如果你使用startMethodTracing(),系统将会跟踪日志文件的默认命名为trace-base-name.trace.当你调用startMethodTracing()方法后,系统开始缓存数据并写入到日志文件,一直到你调用stopMethodTracing。如果在调用结束跟踪方法之前,系统达到缓存大小时,会主动结束日志跟踪并向通知栏发送通知。

创建完日志文件后,需要将日志文件从手机里复制到电脑上。你可以使用下面命令进行复制操作:

adb pull /sdcard/calc.trace /tmp

在TraceView上查看跟踪的日志文件

使用traceview <trace-base-name>格式的命令可以进行查看日志文件,如下:

traceview /tmp/calc

直接使用Trace

首先在DDMS的Devices的面板下选中你想要跟踪应用的进程,然后点击下面图中所示的图标,

点击图标后,弹出下面的对话框

Traceview提供了两种日志跟踪模式:

a.跟踪型。跟踪每个方法从进到出的整个过程。这种方式能提供准确的执行信息,但是占用机器的资源较大。

b.抽样型。按照一个的频率通过虚拟机来采集数据。这种方式较前一种消耗资源较少,但需要更长的执行时间以获取代表性的数据。同时,你还可以自定义数据采集的频率。

点击ok,运行你的应用一段时间后,再点击Devices面板的那个按钮结束数据采集,等待几秒,TraceView会自动将采集的数据展示出来。

了解TraceView的具体使用

TraceView可以将采集的数据信息以视图的方式呈现。TraceView的视图有两部分组成:

-时间轴面板。提供了一个线程和方法从开始到结束的时间内的信息。

-Profile面板。提供某个方法执行的相关信息。

时间轴面板

下图是时间轴面板的一个示例。左栏部分表示不同的线程,每一个线程占据一行,例子中第一行[1]main就是主线程。右栏里的是一个时间轴,时间从左往右逐渐递增,你可以清晰地从表中看到不同的线程在不同时间段所执行需要的时间。具体到每个线程,你可以查看到执行不同方法所需要的时间,不同的方法用不同的颜色所代替(补充,这些颜色都是交替轮回的使用来代替不同的方法)。在绘制的图块下面有细线出现,被细线选中的部分就是你所选的方法所执行的时间。

小提示,

使用TraceView时,要想对某部分你感兴趣的色块进行放大,用鼠标对你所感兴趣的色块进行框选就ok了。

但TraceView并不支持对面板的时间轴的直接缩小,你可使用下面两种方式来对时间轴缩小。

a.点击「时间轴面板」的左上角,时间轴会恢复到最开始全局面貌状态。

b.将鼠标放大「时间轴面板」的右上角,鼠标会发生变化,然后将鼠标向左方拉伸,这时你可以看到更多的时间轴内的信息。

信息面板

Profile面板包含了你所跟踪时间内所执行的方法的信息,主要展示的有两方面:

a.某方法执行的信息,这些信息包括

Incl Cpu Time     某方法占用Cpu的时间

Excl Cpu Time    某方法本身(不包括子方法)占用Cpu的时间

Incl Real Time     某方法真正执行的时间

Excel Real Time  某方法本身(不包括子方法)真正执行的时间

Calls+RecurCalls       调用次数+递归回调的次数

Cpu Time/Call

Real Time/Call

b.点击左侧某个方法,可以查看更多信息,父方法和所有子方法的具体信息,其中父方法的所在的行用紫色背景,子方法所在的行用黄色的背景。

点击右侧栏的某一列的名字,可以让表按该列的数据大小的顺序进行全局排列。通过数据展示,你可以容易地找到怀疑降低应用性能部分的方法。

比如说,在[信息面板]上,你可以从占用Incl Cpu Time最长的那个方法下手,那个方法是不是调用次数多,是不是属于正常情况吗。如果某个方法占用Cpu的时间长,但是调用的次数并不多,这种情况更加值得怀疑,结合具体方法进行查看,是不是代码写得不够好。

TraceView提供是在代码执行过程在不同线程里,不同方法所占用的Cpu时间,被调用次数的信息。它能有效帮助你对代码的性能的好坏做出判断,借助它你可进一步来改善代码提高应用的性能和用户体验。

时间: 2024-12-29 11:27:34

使用TraceView调试并提高Android应用性能的相关文章

十大技巧优化Android App性能

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致程序陷入卡顿.死掉甚至会发生系统错误.

android App性能优化技巧浅谈

Android App性能优化,安卓App性能优化技巧,无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受

优化Android App性能?十大技巧必知

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致程序陷入卡顿.死掉甚至会发生系统错误.

如何做好Android App性能优化

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧.推荐学习Android应用开发入门教程. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致

Android App性能优化十技巧

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧.推荐学习Android应用开发入门教程. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致

优化Android App性能?十大技巧必知!

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致程序陷入卡顿.死掉甚至会发生系统错误.

提高Android和iOS调试编译速度

如果您使用Delphi开发App,就会遇到:Android和iOS的编译实现是太慢了,尤其是debug.这个小技巧使得编译Debug能快不少. 可能你已经知道了这个方法,如果这样设置,那一定为之开心. 您认为Release版本比Debug版本编译需要更长时间,因为它必须执行一堆代码优化阶段,告诉你,实际情况与此相反,在Debug模式下构建适用于iOS或Android的我的应用程序大概需要7.5 分钟,在Release模式下构建相同的应用程序不到1分钟.(当然,与建立相同的Windows应用程序相

android 提升性能总结

出色的用户体验有三个特征:速度快.响应及时以及无缝.下面的信息帮助你的应用如何能够在Android上实现这些特征. 一.速度快 你不能假设手机与桌面系统和服务器一样提速,更多的是你要关注你的代码是否高效. 编写高效的Android代码,应遵循两个原则: 不要做不必要的事 不要分配不必要的内存 以下是一些达到此目标的小技巧(有一些技巧是与oo的原则冲突,斟酌使用场景): 1.避免建立对象 例如,int数组比Integer数组好,同理,这适用于所有基本类型的组合 2.使用本地方法 不要吝惜使用Str

Android界面性能调优手册

转载:https://androidtest.org/android-graphics-performance-pattens/#11 界面是 Android 应用中直接影响用户体验最关键的部分.如果代码实现得不好,界面容易发生卡顿且导致应用占用大量内存. 我司这类做 ROM 的公司更不一样,预装的应用一定要非常流畅,这样给客户或用户的第一感觉就是快.又卡又慢的应用体验,会影响客户或用户对产品的信心和评价,所以不可忽视. 目录 一. Android渲染知识 1.1 绘制原理 1.2 掉帧 1.3