如何测量ListView/ListActivity渲染列表所需的时间?测量渲染ListView的时间ListView
我有一个ListActivity,需要很长时间才能显示(在旧设备上它是〜3s),我想优化它。
编辑:
我已经有Activity1和Activity2之间的时间。在此期间,Activity2正在做一些事情(初始化)。除此之外,它呈现其列表。我想花点时间来完成这个列表。如果活动之间的总时间为3秒,我想知道渲染列表是否需要2.9秒或0.5秒....
如何测量ListView/ListActivity渲染列表所需的时间?测量渲染ListView的时间ListView
我有一个ListActivity,需要很长时间才能显示(在旧设备上它是〜3s),我想优化它。
编辑:
我已经有Activity1和Activity2之间的时间。在此期间,Activity2正在做一些事情(初始化)。除此之外,它呈现其列表。我想花点时间来完成这个列表。如果活动之间的总时间为3秒,我想知道渲染列表是否需要2.9秒或0.5秒....
您可以简单地输出时间。例如,你可以使用logcat
final long t0 = System.currentTimeMillis();
// code to measure
Log.w(TAG, "TEXT" + System.currentTimeMillis()-t0);
当然,你可以使用任何其他系统的输出像对话框或东西。只需使用你喜欢的。
编辑:
如果你不想在你的代码中使用调试消息,所有的时间,你可以做这样的:
创建一个类中调用设置:
public class Settings {
public static final boolean DEBUG = true;
// If you prefer you could do use an enum
// enum debugLevel {SHOW_EVERYMESSAGE, ERRORS, IMPORTANT_MESSAGES, ...}
// In your classes you would have to check that DEBUG is less or equal than
// the debugLevel you want
}
在类要使用调试消息仅仅做到这一点
import xxx.yyy.Settings
class foo {
final static boolean DEBUG = Settings.DEBUG;
if(DEBUG){
// Debug messages
}
}
现在,如果您要禁用DEBUG消息,您可以在Settings类中简单设置DEBUG = false
。
如果您想要在两个活动之间进行测量,您可以使用intent并将t0发送给另一个活动以计算时间。当然,您可以在if(DEBUG){ /* code */ }
声明中包含此内容,以免发送最终版本中的意图。 if语句不应该太大地增加代码的计算。
我不能说是否使用System.currentTimeMillis()
或System.nanoTime()
来提供更好的实现。尽管如此,你应该尝试一下TimingLogger。看看这个article describing the usage of the TimingLogger helper class。
是的,但在什么时候?有没有像onStartRender/onStoprender? – zorglub76 2011-03-10 09:26:26
我在之前的onPause和ListActivity的onResume之间存在差距。我不会把调试线放在适配器的getView中... – zorglub76 2011-03-10 09:32:39
使用意图在两个活动之间发送t0。或使用我编辑的解决方案。有了这个,您几乎可以在释放代码之前删除调试消息,而无需太多麻烦。 – Darokthar 2011-03-10 11:07:39