Android 层次查看器中的绘制时间错误?

Android 层次查看器中的绘制时间错误?,android,android-sdk-tools,Android,Android Sdk Tools,我正在使用Android SDK附带的Hierarchy Viewer工具进行一些测试 我正在测试的活动具有以下xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_

我正在使用Android SDK附带的Hierarchy Viewer工具进行一些测试

我正在测试的
活动
具有以下xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        android:layout_alignParentTop="true"/>

    <TextView android:id="@+id/slow_measure"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:text="Slow Measure"
        android:layout_alignParentBottom="true"/>

    <TextView android:id="@+id/slow_layout"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:text="Slow Layout"
        android:layout_above="@id/slow_measure"/>

    <com.test.SlowDrawView android:id="@+id/slow_draw"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:background="#FF0000"
        android:text="Slow Draw"
        android:layout_above="@id/slow_layout"/>
</RelativeLayout>
当我检查hv中此
视图的绘制时间时,我注意到小于3个格,这没有任何意义

你知道为什么会这样吗?
我还注意到android中有两个版本的hv。有人知道区别吗?

层次结构查看器在其测量中似乎使用了“线程时间”而不是“挂钟时间”。这意味着它不计算线程等待另一个线程(阻塞它)的结果的所有时间,也不计算线程睡眠时间,如您的示例所示

我在安卓CPU监视器上查看了它,它证实了我的想法

您可以使用一些繁重的操作加载主线程,以查看线程时间是如何增加的。我在
onDraw()
onLayout()
中调用了数字39的递归斐波那契算法:

@Override
protected void onDraw(Canvas canvas) {
    try {
        Thread.sleep(3000L);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    super.onDraw(canvas);
}
 @Override
protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  fib(39);
}

public static int fib(int n) {
    if (n == 0 || n == 1) {
      return 1;
    } else {
      return fib(n - 1) + fib(n - 2);
    }
  }