美文网首页
View的绘制流程重新整理

View的绘制流程重新整理

作者: 雨来 | 来源:发表于2025-10-26 11:23 被阅读0次

在讲本流程前默认你已经懂了Activity的启动流程
接Activity的启动流程 在AMS binder驱动返向 transact 后


image.png

在 ApplicationThreadNative(应用进程)Binder收到回调onTransact


image.png
调用 ApplicationThread的scheduleLaunchActivity
image.png
image.png
image.png

Ui线程Handler处理消息


image.png
android.app.ActivityThread#handleLaunchActivity
image.png
Activity a = performLaunchActivity(r, customIntent); 有兴趣的可以点击这个方法看看,这里是借助 Instrumentation的协调产出了一个Activity 并且调用了Activity的 attach方法
在Activity中的 attach方法中做了一些绘制的准备工作
1、PhoneWindow的创建
2、并给PhonwWindow设置了windowManager
然后绘制流程开始的函数handleResumeActivity出现了
image.png image.png

ViewManger或者说WindowManger的实现类是 WindowManagerImpl 进入到它的


image.png

因为前面在 ActivityThread中 WindowManagerGlobal已经初使化好了所以上面可以直接调用了
下面调用了ViewRootImpl的 setLayoutParams


image.png
image.png image.png
image.png
image.png
image.png
image.png
image.png
image.png image.png
所以你说View绘制的顺序是measure、layout、draw是没有问题的。
还有个问题就是在ViewRootImpl setLayoutParams的时候 调用了一下
image.png
这里有checkThread()
image.png
为什么在Activity的onCreate中开启一个子线程给一个TextView设置文本不会崩溃
image.png
如果延迟个1秒就崩溃了呢?
这是因为如果以极快的速度在onCreate里子线程更新ui时View还没有开始绘制流程不存在checkThread()

相关文章

网友评论

      本文标题:View的绘制流程重新整理

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