2010-10-06 16 views
91

我需要找到我的Android应用中的瓶颈位置。如何分析我的Android应用程序?

我可以使用哪些分析工具或技术?

+0

我对Android不熟悉。你可以在可以打断的调试器下运行应用程序吗?如果是这样,这个方法的工作原理:http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024 – 2010-10-06 20:57:06

+0

嗯,有趣。劳动密集型,但可能用于发现更明显的性能问题。谢谢。 – teedyay 2010-10-07 08:10:44

+0

我明白你是怎么想的:http://stackoverflow.com/questions/2624667/whats-a-very-easy-c-profiler-vc/2624725#2624725 – 2010-10-07 11:26:56

回答

35

您可以使用Traceview。这远非理想,而是有效。 This article描述如何使用它。

+2

当我运行它时,它表示命令行版本已被弃用,然后退出。什么是新方法? – gonzobrains 2013-05-09 18:51:00

18

DDMS是Android的最佳选择。 默认情况下,它包含在ADT插件中。

This具有详细示例的文档应该可以帮助您处理DDMS。


对于内存分析,尝试的Eclipse MAT

+4

有关DDMS的Android文档:http://developer.android.com/tools/debugging/ddms.html – sulai 2013-01-14 15:59:29

11

这取决于你要测试干嘛。

如果您为Android开发应用程序,则应该尝试使用TimingLogger类。看看描述TimingLogger助手类的用法的this article

一个很好的工具是JMeter,还有一个plugin for Android

如果您不想使用外部工具,但采用非常标准的方式来度量已用时间,则必须使用System.nanoTime()。你不应该使用currentTimeMillis,因为它测量挂钟时间ans,因为没有计算机的时钟是完美的(它们偶尔都需要校正),所以有一个运行的过程并不断发出对系统时钟的小的修正。更不用说闰秒修正了。

尽管经常使用currentTimeMillis,但测量已用时间和时间仍然不正确。无论如何,因为调用需要一些时间,所以你不应该期望正确的时间间隔非常小。但这不应该是Android的问题。

我会告诉你一个例子:

long startTime = System.nanoTime(); 

// run/call the method 

long endTime = System.nanoTime(); 
long diff = endTime - startTime ; 
System.out.println("Elapsed milliseconds: " + diff /1000000); 

你可以有这个免费的图书馆看看还有:http://jetm.void.fm/

您还可以找到JMeter的教程。