接着对上篇文章进行谈论。Android中onMesure研究(1) 。上一篇文章介绍,每一个View在显示的时候,对onMeasure方法的调用,是从最里层的View开始measure。从数据结构上讲述,是对二叉树最外层的儿子(View)开始measure。上篇博文提到是因为递归调用。

      在一个Activity中,调用SetContentView后,最终就会触发ViewRoot中的scheduleTraversals这个函数。

    public void scheduleTraversals() {        if (!mTraversalScheduled) {            mTraversalScheduled = true;            sendEmptyMessage(DO_TRAVERSAL);        }    }

       该函数会发送一个DO_TRAVERSAL消息,在handleMessage中处理,调用到performTraversals函数,这个函数涉及到measure和onLayout方法。该函数有600行,并且是一个递归函数。     

 private void performTraversals() {        // cache mView since it is used so much below...        final View host = mView;        if (DBG) {            System.out.println("======================================");            System.out.println("performTraversals");            host.debug();        }        if (host == null || !mAdded)            return;        mTraversalScheduled = false;        mWillDrawSoon = true;... ... ... host.measure(childWidthMeasureSpec, childHeightMeasureSpec);... ... ... host.layout(0, 0, host.mMeasuredWidth, host.mMeasuredHeight);} else {            // We were supposed to report when we are done drawing. Since we canceled the            // draw, remember it here.            if ((relayoutResult&WindowManagerImpl.RELAYOUT_FIRST_TIME) != 0) {                mReportNextDraw = true;            }            if (fullRedrawNeeded) {                mFullRedrawNeeded = true;            }            // Try again            scheduleTraversals();}     }
       从上述代码中,我们可以看到,onLayout方法的调用,与onMeasure调用顺序是一致的。 接下来,我们开始研究View类中的measure和layout方法了。      

更多相关文章

  1. C语言函数的递归(上)
  2. Android截屏方法总结
  3. Android蓝牙开发浅谈【转】
  4. android如何停止Thread和AsyncTask
  5. Android(安卓)源码分析 - 事件分发机制
  6. Roboletric+Retrofit2单元测试
  7. Android图片压缩,自己编译libjpeg
  8. Android属性动画之ObjectAnimator和AnimatorSet
  9. Android期末复习题

随机推荐

  1. Android SDK 版本的简称
  2. 手动生成Android的R.java文件
  3. Android app not full screen on Smartq7
  4. 开始android
  5. android不同应用程序之间启动Activity
  6. Android 中mkdir() 和mkdirs()创建目录的
  7. Android 开发中遇到的 bug(9)
  8. Android(安卓)抽象布局include merge Vie
  9. 备份、恢复android软件设置
  10. Java-->Android 直连 Ms Sql Server 2008