这篇文章讲下Android View的绘制流程:
主要从下面方面切入:
image.png
image.png从ActivityThread类的 方法开始,将DecorView添加到窗口Window的过程,依次调用的Api及所属类名如下图:
注 这个方法会检测当前操作进程是不是在Android主线程,不是的话直接抛出异常!
我们看下 方法,其中执行的 这个方法传入的第二个参数 实现了,在它的方法中调用了接下来的api,所以从开始,后续操作都在新的线程
void scheduleTraversals() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
mChoreographer.postCallback(
Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
if (!mUnbufferedInputDispatch) {
scheduleConsumeBatchedInput();
}
notifyRendererOfFramePending();
pokeDrawLockIfNeeded();
}
}
再往下, 会执行调用View的绘制流程的三大步
- 测量: ViewRootImpl --> 调用DecorView的 方法进入View的绘制流程
- 布局: ViewRootImpl
- 绘制: ViewRootImpl
对于View绘制的是三个主要方法分析请见:
Android View 的绘制流程(二)
网友评论