如何测量ListView / ListActivity渲染其列表所需的时间?
我有一个需要很长时间才能显示的ListActivity(在较旧的设备上它是〜3s),我想优化它。
编辑:
我在Activity1和Activity2之间已经有时间了。在此期间,Activity2正在做一些事情(初始化)。除其他外,它呈现其列表。我希望这个活动花时间来呈现该列表。如果活动之间的总时间是3秒,我想知道渲染列表是否需要2.9秒或0.5秒....
答案 0 :(得分:3)
你可以简单地输出时间。例如,您可以使用logcat
final long t0 = System.currentTimeMillis();
// code to measure
Log.w(TAG, "TEXT" + System.currentTimeMillis()-t0);
当然,您可以使用任何其他系统进行输出,如对话框或内容。只需使用你喜欢的东西。
编辑:
如果你不想在你的代码中一直使用调试消息,你可以这样做:
创建一个名为settings的类:
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消息,只需在“设置”类中设置DEBUG = false
即可。
如果要在两个活动之间进行测量,可以使用意图并将t0发送给另一个活动以计算时间。当然,您可以在if(DEBUG){ /* code */ }
语句中包含此内容,以免在最终版本中发送意图。 if语句不应过于显着地增加代码的计算。
答案 1 :(得分:1)
我无法判断Java是否使用System.currentTimeMillis()
或System.nanoTime()
提供了更好的实现。不过,你应该试试TimingLogger课程。看一下这个article describing the usage of the TimingLogger helper class。