美文网首页
Android中View的创建过程

Android中View的创建过程

作者: liberty_7658 | 来源:发表于2020-11-08 14:36 被阅读0次

这是一篇很底层的View的创建分析,从Activity的创建一路讲到View的创建。从底层告诉你 为什么不能在子线程里面更新UI。

我们知道在onCreate里面View还是没有测绘完成的。那么什么时候测绘完成了?答案是onResume。
通过查看源码 我们可以看到在onCreate方法里面调用了getWindow()方法然后在将我们的页面塞到这个window里面。这个window也就是PhonwWindow.

 public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }

那PhoneWindow是什么时候被创建的?
这就引出了Activity的创建流程。
那Activity是怎么被创建的呢?
由于Activity是一个组件他是由系统使用ActivityThread方法去创建的。
现在我来分析下:
先来到ActivityThread类的handleLaunchActivity方法。

image.png
在这里我们可以看到他去创建了一个Activity。现在继续跟进去(performLaunchActivity)。
在这里可以看到通过反射的方式创建了Activity。
image.png
同样在performLaunchActivity方法里的第3243行:
image.png
去调用了callActivityOnCreate方法:继续跟进去:
image.png

可以看到他去调用了Activity的performCreate方法。


image.png

现在我们终于看到onCreate方法被调用了。

这里还有个重点,在performLaunchActivity里面去调用Activity的onCreate方法之前还去做了一件很重要的事情,这个事情在第3224行:调用了Activity的attach方法。


image.png

现在跟到Activity的attach方法:找到了我们一直找的PhoneWindow的创建。


image.png

至此我们找到了window是什么时候创建的了。

相关文章

网友评论

      本文标题:Android中View的创建过程

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