Activity启动与View绘制

Activity里面有一个成员变量ActivityThread,也就是Activity的UI主线程。

在ActivityThread执行handleResumeActivity时就会为PhoneWindow(r.activity.getWindow)中的DecorView设置LayoutParam,并且通过源码发现handleResumeActivity函数首先会执行performResumeActivity,此时会调用Activity的onResume()生命周期函数,onResume()后面是onAttachedToWindow(),并且onAttachedToWindow只会调用一次,不会受用户操作行为影响。所以在onAttachedToWindow中进行窗口尺寸的修改

ViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽带,View的三大绘制流程都是通过ViewRoot来完成的。在ActivityThread中,当Activity被创建时,会将DecorView添加到Window中,同时创建一个ViewRootImpl对象,并将ViewRootImpl对象和DecorView对象建立关联。

                                                                                                                                     ------《Android开发艺术探索》第4章View的工作原理

Activity启动与View绘制的顺序为:

1. 在Activity中的attach方法中建立phoneWindow对象,其中phoneWindow是window的子类。

2.一切从onCreate()中的setContentView()开始,在setContentView()之前设置一些风格,以便在建立DecorView时设置风格。

3.setContentView()方法中会建立DecorView对象,之后会调用generateLayout(),这个方法中首先根据之前设置的风格来制定风格。

4.在将DecorView addView()到window中时,addView()中创建了一个对象ViewRoot,ViewRoot其实就一个Handle,它会掉用scheduleTraversals()发送一个message(这个message被Loop取出给ViewRoot中的handleMessage里的一个方法),这个方法是就performTraversals(),也就是启动了绘画流程,这个方法里面会分别调用measure、layout、draw。

猜你喜欢

转载自blog.csdn.net/qq_36282231/article/details/81075002
今日推荐