美文网首页
Android View的绘制流程(一)

Android View的绘制流程(一)

作者: 刘小厨 | 来源:发表于2020-03-22 16:47 被阅读0次

    这篇文章讲下Android View的绘制流程:


    主要从下面方面切入:


    image.png

    从ActivityThread类的 \color{blue}{handleResumeActivity}方法开始,将DecorView添加到窗口Window的过程,依次调用的Api及所属类名如下图:

    image.png

    \color{blue}{ViewRootImpl (requestLayout())}这个方法会检测当前操作进程是不是在Android主线程,不是的话直接抛出异常!

    我们看下 \color{blue}{ViewRootImpl (scheduleTraversals())}方法,其中执行的 \color{blue}{mChoreographer.postCallback()}这个方法传入的第二个参数 \color{blue}{mTraversalRunnable}实现了\color{blue}{Runnable},在它的\color{blue}{run()}方法中调用了接下来的api,所以从\color{blue}{ViewRootImpl (doTraversals())}开始,后续操作都在新的线程

     void scheduleTraversals() {
            if (!mTraversalScheduled) {
                mTraversalScheduled = true;
                mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
                mChoreographer.postCallback(
                        Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
                if (!mUnbufferedInputDispatch) {
                    scheduleConsumeBatchedInput();
                }
                notifyRendererOfFramePending();
                pokeDrawLockIfNeeded();
            }
        }
    

    再往下, \color{blue}{ViewRootImpl (performTraversals())} 会执行调用View的绘制流程的三大步

    • 测量: ViewRootImpl \color{blue}{performMeasure()} --> 调用DecorView的\color{blue}{Measure()} 方法进入View的绘制流程
    • 布局: ViewRootImpl \color{blue}{performLayout() }
    • 绘制: ViewRootImpl \color{blue}{ performDraw() }

    对于View绘制的是三个主要方法分析请见:
    Android View 的绘制流程(二)

    相关文章

      网友评论

          本文标题:Android View的绘制流程(一)

          本文链接:https://www.haomeiwen.com/subject/rhkvyhtx.html