【问题标题】:Measure time for rendering ListView测量渲染 ListView 的时间
【发布时间】:2012-07-30 04:26:27
【问题描述】:

如何测量 ListView/ListActivity 呈现其列表所用的时间?

我有一个 ListActivity 需要很长时间才能显示(在旧设备上大约需要 3 秒),我想对其进行优化。

编辑:

我在 Activity1 和 Activity2 之间已经有时间了。在此期间,Activity2 正在做一些事情(初始化)。除其他外,它会呈现其列表。我想花时间这个活动来呈现该列表。如果活动之间的总时间是 3s,我想知道渲染列表需要 2.9s 还是 0.5s....

【问题讨论】:

    标签: android performance list


    【解决方案1】:

    您可以简单地输出时间。例如,您可以使用 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 消息,您只需在 Settings 类中设置 DEBUG = false

    如果您想在两个活动之间进行测量,您可以使用意图并将带有意图的 t0 发送到另一个活动以计算时间。当然,您可以将其包含在 if(DEBUG){ /* code */ } 语句中,以免在最终版本中发送意图。 if 语句不应该显着增加代码的计算量。

    【讨论】:

    • 是的,但在什么时候?有没有类似 onStartRender/onStoprender 的东西?
    • 我在上一个的 onPause 和 ListActivity 的 onResume 之间有一个差距。而且我不会在适配器的 getView 中添加调试线...
    • 使用意图在两个活动之间发送 t0。或使用我编辑的解决方案。有了这个,您几乎可以在发布代码之前删除调试消息,而不会有太多麻烦。
    • 我想你不明白我的意思。我已经有时间在 Activity1 和 Activity2 之间。在此期间,Activity2 正在做一些事情。除其他外,它会呈现其列表。我想花时间这个活动来呈现该列表。如果活动之间的总时间是3s,我想知道渲染列表需要2.9s,还是需要0.5s....
    • 如果你真的认为是渲染,从android源码中获取ListView.java,放到你的项目中。然后插入调试消息和import ListView.java 而不是android.widget.ListView。但首先我会尝试找出用数据填充列表元素需要多长时间。正如我所想,这是一长串列表中的瓶颈。你如何填充你的列表?你总是打开数据库吗?还是在第一次调用数据库后保存数据?打开数据库可能需要很长时间。
    【解决方案2】:

    我无法判断 Java 是否使用 System.currentTimeMillis()System.nanoTime() 提供了更好的实现。不过,您应该尝试一下TimingLogger 类。看看这个article describing the usage of the TimingLogger helper class

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多