- 浏览: 304072 次
- 性别:
- 来自: 广州
最新评论
-
qipa2015:
hao
Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片 -
chungehenyy:
Android中的JSON详细总结 -
wangys198:
请教下怎么加入一个jar包
说说APK反编译(代码插入)的那点事 -
andy199:
Android的TextView使用Html来处理图片显示、字体样式、超链接等 -
tyjxf:
加载图片是个烦人的事,我也正在困扰中
Android实现ListView异步加载图片
概述
创造愉快用户体验的关键是开发响应快捷的应用。借助Android* 软件开发套件(SDK)提供的组件,性能问题调试任务因为简单易用的性能分析工具而变得更简单了。在这篇文章中,我们将认识一些不同的工具,它们可排除故障和调试性能问题或小幅度提升已完成应用的性能。我们不会说得太细,只会概括介绍如何针对您的应用使用这些工具。
我们将在Eclipse 中展示这些工具;您可以根据“ADT Plugin for Eclipse* (面向 Eclipse 的 ADT 插件)”一文中的说明来安装ADT插件。
DDMS
DDMS是一款Google* 提供的应用,可作为独立的工具运行,也可通过ADT Eclipse* 插件集成到Eclipse* 中。它提供了强大的特性集合,能帮助您快速了解应用的运行状况。
线程更新
DDMS中的线程监控和评测浏览对于管理大量线程的应用很有用。要启用,点击 Update Threads(更新线程)图标即可开始。
图 1
这使下面的窗口会显示面向选中VM进程的所有线程的名称和其他细节。
图 2
utime和stime代表了线程在瞬间运行用户代码(utime)和系统代码(STIME)所花的总时间。一瞬间的时间是由系统定义的,但通常为10毫秒。星号表示守护线程;native状态表示线程正执行原生代码。仔细观察上述样本数据,很明显,除了应用主线程花了大量时间外,运行GC也花了挺多的时间。仔细观察应用如何处理对象创建可能有助于提高性能。
堆工具
堆查看
点击Update Heap(更新堆)按钮,获得有关选定虚拟机中堆分配的信息。
图 3
图 4
点击"Cause GC"开始.堆的详细信息被显示出来,并附有针对特定分配类型的分配大小图示。如果您有分配泄漏,这可能是一个很好的检查点,通过观看Heap Size(堆大小)的总体趋势,确保在应用运行期间它不会一直变大。
Allocation Tracker(分配跟踪器)
Allocation Tracker(分配跟踪器)视图中显示了有关分配的更深层细节。点击“Start Tracking(开始跟踪)”,在应用中执行某个操作,然后点击“Get Allocations(获得分配)”。
图 5
所示列表按分配排序,首先显示最新的分配。选中它可看到一个关于分配如何创建的堆栈轨迹(stack trace)。
仔细查看分配细节,下面的代码看起来有改进的空间:dataStr += String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ);
上例可简单重构为下面的代码,节省构造临时char[]的开销。.dataStrBuilder.append(String.format(" Std. Dev.: %.3f, %.3f, %.3f\n", devX, devY, devZ));
Method Profiling(方法分析)
Method Profiling(方法分析)是DDMS的一款工具,对于快速概览应用中时间的消耗分布非常有用,也可用于时间关键型函数的详细查看。
图 6
在应用运行并执行某个有趣的任务时,如果您想获得更多有关该任务的性能数据,点击“Start Method Profiling(开始方法分析)”。分析器只收集少量数据(没见过超过2或3秒),所以,几分钟后再次单击该图标以停止收集。从DDMS中激活方法分析器可使工具自动使用内部存储来存储分析结果,当捕捉完成后,将它们发送回主机,作进一步分析。
IDE将自动启动Traceview窗口,帮助您在IDE(图7)中分析结果。
图 7
解析结果是最有趣的部分。单击底部窗格中的方法调用可创建一个层级结构,为您显示目前的方法——先是调用该方法的母方法,然后是从选定方法中调用的子方法。
在本例被测应用中,我选中了onSensorChanged方法。当您注册接收来自传感器类型的通知时,这种方法便是通过SensorManager API调用的方法。这里的调用方法是handleMessage,它来自操作系统,所以由此开始我的实现方法是一个不错的选择。子方法根据 “总计”所花的时间百分比排序。这里的“总计”表示在该方法及该方法调用的所有子方法内所花费的时间。因此,对于onSensorChanged调用,超过70%的时间花在了calcStandardDeviation和averageSamples上。我期望该调用多花一些时间来计算标准偏差,而不是仅仅将样本平均。所以利用这则新信息,我能更加深入地查看我的实施并发现代码优化点。
想详细了解Traceview,请参考“利用Traceview与dmtracedump进行分析(Profiling with Traceview and dmtracedump)”。
分析API
为获得有着更高精度的的方法分析细节,调用可在代码中进行以启动和停止分析。您需要在设备中加载一个SD卡来使用此方法。在下面的例子中,我们添加hook(钩子)以更好地了解传感器处理代码:
- private static boolean doOnce = true;
- @Override
- public void onSensorChanged(SensorEvent event) {
- if ( doOnce ) {
- android.os.Debug.startMethodTracing();
- }
- Code under test…
- if ( doOnce ){
- android.os.Debug.stopMethodTracing();
- doOnce = false;
- }
- }
private static boolean doOnce = true; @Override public void onSensorChanged(SensorEvent event) { if ( doOnce ) { android.os.Debug.startMethodTracing(); } Code under test… if ( doOnce ){ android.os.Debug.stopMethodTracing(); doOnce = false; } }
跟踪文件默认为:/ mnt / sdcard/dmtrace.trace,可通过下面的命令从设备中提取出来:adb pull /mnt/sdcard/dmtrace.trace.
运行独立的Traceview工具:“traceview C:\dmtrace.trace”,会打开一个用户界面,类似于嵌入到Eclipse中的用户界面。
布局用户界面工具
layoutopt(布局选择)
每当要调用某应用结束时,我就希望在活动的用户界面布局中获得简单的性能增益。 layoutopt这一工具会分析您的布局文件,并指出潜在的性能问题。在这篇博客和参考文件会谈到该问题,让我们快速浏览该如何使用这一工具吧。命令行用法如下:layoutopt.bat C:\Projects\workspace\DeviceInformation\res
注:我把Android* SDK工具目录放在我的路径中。它看起来也像一款工具,只在您详细说明要分析目录的完整路径时才可用。
输出示例:
C:\Projects\workspace\DeviceInformation\res\drawable\btn_notification_ic_example.xml
C:\Projects\workspace\DeviceInformation\res\drawable\picture_frame.xml
C:\Projects\workspace\DeviceInformation\res\layout\action_bar_custom.xml
23:23 This TextView layout or its LinearLayout parent is useless
C:\Projects\workspace\DeviceInformation\res\layout\content_applicationinfo_main.xml
16:19 This LinearLayout layout or its LinearLayout parent is useless
C:\Projects\workspace\DeviceInformation\res\layout\content_benchmark_main.xml
C:\Projects\workspace\DeviceInformation\res\layout\content_main.xml
C:\Projects\workspace\DeviceInformation\res\layout\content_sensorinfo_main.xml
17:20 This LinearLayout layout or its LinearLayout parent is useless
X:Y是与问题对应的XML标记的开始行和结束行。上面指出的多余布局增加了活动的整体加载时间,可用于方便地提升您的活动加载速度。
Hierarchy Viewer(层级查看器)
性能问题调试中另一款有用工具就是Hierarchy Viewer (层级查看器)工具。此应用只能连接到Android* 操作系统的开发人员版本中,所以在不用开发设备情况下,使用它的最简单的方法就是利用模拟器。通过命令行运行该工具:
hierarchyviewer
结论
希望我已为您的应用性能提升需要提供了一些新的工具与知识。除了使用这些工具来发现您在哪些方面可以获得增益外,很多性能改进可在代码级别实现。您可以在“Designing for Performance”(性能设计)一文中更多了解有关常见性能编码技术。
以下文章提供了更深入介绍和其他技巧:
Designing for Responsiveness(响应性设计)
Windows* Background & UI Speed(Windows背景和用户界面加速)
1http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/int_eclipse.htm
发表评论
-
Android 学习资料大集合
2012-02-22 11:23 2558<script type="t ... -
总结了近百个Android优秀开源项目,覆盖Android开发的每个
2012-02-21 11:21 1967Android开发又将带来新一轮热潮,很多开发者都投入到这 ... -
说说APK反编译(代码插入)的那点事
2012-02-21 09:54 9085很多人热衷于逆向工程,其过程中既可以学习作者的思路,又可以锻炼 ... -
(转)一种新的MAT使用方法分析内存溢出问题
2012-02-21 09:42 1993相信很多人都用过MAT来分析内存溢出,而且网上有很多的使用方法 ... -
Android SDK 中Android.net.wi
2012-02-06 15:20 1859这里列了很多,但是大致可以分为四个主要的类ScanResult ... -
android 从assets和res中读取文件(转)
2012-02-03 15:02 25441. 相关文件夹介绍 ... -
textview 超链接去掉下划线和设置超链接颜色
2011-12-06 17:15 3803/** * 点击超链接时打开其他博主资料页面 * ... -
按钮Listview等点击效果
2011-11-12 22:58 4018想设置listview中每行在点击、选中等不同状态下有不同的背 ... -
android 获取视频和图片的缩略图
2011-11-12 01:53 118281 在显示视频图片列表时,发送彩信时,制作幻灯片时都需要显示视 ... -
调用android系统图标
2011-10-31 16:54 2852Android系统中自带了很多图标,我们的程序可以方便使用。 ... -
The content of the adapter has changed but ListView did not receive a notificati
2011-10-27 15:43 1171在Android开发过程中,使用了大量的ListView,发现 ... -
android的上下文菜单---context menu
2011-09-23 09:53 1267android的菜单有三种: ... -
选择系统图片方法时返回图片真实路径
2011-09-21 10:36 1626protected void onActivityResul ... -
android一些技巧
2011-09-01 18:08 1509EditText ed = ... -
android TextView中超链接的事件捕捉(textview上LINK的点击事件)
2011-08-19 18:43 2531package com.cm; import java. ... -
Android的TextView使用Html来处理图片显示、字体样式、超链接等
2011-08-19 18:38 4582转载:http://my.oschina.net/java ... -
Android 设置EditText显示或隐藏密码
2011-08-17 16:37 2238设置EditText显示或隐藏密码. 在CheckBox的o ... -
android调用系统资源裁剪图片
2011-08-08 12:52 28491 import java.io.File; 2 import ... -
Android 复制 粘贴
2011-07-25 10:18 2534Android 复制 粘贴 ClipboardManager ... -
三款Json查看小工具
2011-07-07 10:55 2702JSON(JavaScript Object Nota ...
相关推荐
Android应用性能调试 创 造愉快用户体验的关键是开发响应快捷的应用。借助Android* 软件开发套件(SDK)提供的组件,性能问题调试任务因为简单易用的性能分析工具而变得更简单了。在这篇文章中,我们将认识一些不同...
android中使用sdk提供的工具测试开发的应用程序的性能,分析性能
《Android应用开发》还对Android平台下开发环境的搭建、程序的签名和发布以及程序调试和性能优化所用到的工具和方法等进行了讲解。 《Android应用开发》适合有一定程序设计基础并致力于从事Android平台应用软件开发...
《Android应用开发》还对Android平台下开发环境的搭建、程序的签名和发布以及程序调试和性能优化所用到的工具和方法等进行了讲解。, 《Android应用开发》适合有一定程序设计基础并致力于从事Android平台应用软件开发...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
调试应用程序:开发者可以使用ADB来调试他们的Android应用程序。它可以启用日志记录、跟踪应用程序性能,并在设备上运行调试会话。 启动和停止组件:您可以使用ADB启动或停止Android应用程序的活动、服务、广播接收...
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...
第12章针对商业应用的需要讲解了Android的调试、测试与性能优化;第13章全面地剖析了Android的编译系统,包括编译工具、映像文件编译、SDK编译、NDK编译和目标系统的配置等;第14章分析了Android系统的启动过程;第...
AIR_Android应用开发实战pdf文档 完整版; 以及 AIR_Android应用开发实战 全书各个章节的源代码 第一章:AIR Android开发简介 第二章:第一个AIR Android程序 第三章:处理用户交互 第四章:加速计 第五章:地理...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
第12章针对商业应用的需要讲解了Android的调试、测试与性能优化;第13章全面地剖析了Android的编译系统,包括编译工具、映像文件编译、SDK编译、NDK编译和目标系统的配置等;第14章分析了Android系统的启动过程;第...
本书介绍了使用Flash CS5和Flash Builder for Android and iOS应用开发所有类型的移动应用程序。在本书中将学习如何在移动设备上创建、安装并调试应用程序。然后将逐个介绍与移动Flash应用开发有关的每一个关键主题...
《移动开发经典丛书·Android C++高级编程:使用NDK》中我们将学习如何用AndroidNDK通过原生代码语言去实现自己的Android应用中对性能要求较高的部分。 《移动开发经典丛书·Android C++高级编程:使用NDK》介绍了...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
Android SDK:作为开发环境,提供了丰富的API和工具来构建Android应用。 Java/Kotlin:作为主要编程语言,用于编写应用的逻辑和用户界面。 Material Design:作为界面设计指南,确保应用界面的一致性和现代感。 ...
本书由资深Adobe技术专家兼资深Android应用开发工程师亲自执笔,既系统全面地讲解了如何利用Adobe AIR技术开发Android应用,又细致深入地讲解了如何将已有的基于PC的AIR应用移植到Android设备上。不仅包含大量实践...
使用SWIG自动生成JNI代码● 使用POSIX线程实现多线程应用● 使用POSIX套接字实现网络应用● 使用logging、GDB和Eclipse调试器进行调试● 使用Valgrind分析内存● 使用GProf 测试应用性能● 使用NEON/SIMD优化代码●...
AndroidGodEye是适用于Android的性能监控工具(不限于性能数据),您可以轻松地在PC浏览器中实时监控应用程序的性能。 您还可以在生产环境中使用它来监视应用程序的在线性能()。 目前,AndroidGodEye已应用于多...