Android View的绘制流程(一)

2020-03-22  本文已影响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的绘制流程的三大步

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

上一篇下一篇

猜你喜欢

热点阅读