如何确定导致Android应用程序变慢的问题

3
我是Android开发的新手(也是Java的),我觉得自己做得不错——我有一个应用程序,可以读取XML文件,将其解析成SQLite数据库,从数据库中获取信息以填充不同的站点部分(可滚动的新闻列表)...等等。我使用AsyncTasks进行导入过程...等等。
但是,我的应用程序第一次加载需要很长时间(15-25秒),每次切换部分需要大约10秒钟(将单个XML文件解析成SQLite数据库,并填充listView)。
与iPhone应用程序相比,后者只需要2-3秒钟即可切换部分...
简而言之:如何确定我的应用程序运行缓慢的原因?是否有线程监视器或其他方式可以查看哪些操作需要花费很长时间,而不仅仅是在各个位置放置Log.d()?

如果您正在使用带有ADT插件的Eclipse,则应该有一个调试过程...我没有多少使用它。另外,Android和iOS大约同龄吗?iOS用户倾向于比Android用户更快地升级(总体而言),但不要想知道为什么3年前的Android不如最新的iPhone快。 - Russ
Russ - 谢谢你抽出时间,但是你的评论与这个问题完全没有关联(而且也不太有意义,因为显然这两个应用程序的代码并不相同)。 - Dave
2个回答

3

请查看traceview。它是一个非常好的工具,可以让您查看应用程序花费时间的方法级别。在此处的描述中无法很好地展示其功能,请跟随该链接并查看。

您还可以查看strictmode,但这更多用于查明应用程序的UI为什么不响应。


你能否提供一些指示?那个链接上的说明非常简略。我已经在命令提示符中进入了工具目录...但现在我正在尝试按照它的“使用:”注释进行操作,但一直出现“错误:找不到或加载主类...”的提示。 - Dave
这是一篇详细说明的页面。http://developer.android.com/tools/debugging/debugging-tracing.html。很抱歉,我不会在这里花时间试图写出比谷歌更好的文档。 - Jeffrey Blattman
希望能有一些实际可行的指导,而不是关于“如何使用代码”的概括性说明......但这似乎就是答案......只能试着去摸索,直到有些东西让人感到合理为止。谢谢!(暂时给个+1,如果几天后仍然是最佳答案,我会标记它) - Dave

3
我认为TraceView包含了太多信息,容易迷失方向。
我的解决办法是在代码的三个位置记录系统时间。
在潜在的缓慢代码之前、之后和中心处。
就像二分查找一样,下一次逐步缩小范围,最终找到罪魁祸首的代码。

谢谢 - 这对我的需求非常有效。尽管Jeffery的回答可能更加详细,也是一些人所需要的,但对我来说,这种方法在30秒内就起作用了 - 而不必学习那些令人困惑的traceview。 - Dave
为了解决问题,你需要先知道问题出在哪里。我想你可能会通过一些艰难的经历来学习这个道理,但是你的应用程序变慢的原因很可能不是那么显而易见。Traceview 就是专门为此而发明的工具,你认为在代码块周围放置计时器是更好的方法吗? - Jeffrey Blattman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接