View怎么显示在界面上的,其实面试官想问 Activity 与 Window 与 View 之间的关系,把这三者间的问题说清楚,在总结一下其实就差不多了,可以在把 LayoutInflater.from(mContext).inflate(resId, contentParent) 讲讲,基本上达到面试官的期望值了。
先创建 Activity ,然后再 Activity 中创建一个 PhoneWindow 对象,在 Android 中 Window 是一个抽象概念,Android 中 Window 的具体实现类是 PhoneWindow ,Activity 和 Dialog 中的 Window 对象都是 PhoneWindow 。
PhoneWindow 对象是在 onCreate() 方法之前创建的。
回调 Activity.onCreate() 后,会执行 setContentView() 方法将我们写的 Layout 布局页面设置给 Activity。
在 Activity 的 onCreate() 方法中 PhoneWindow 会调用相应的 getWindow().setContentView(layoutResID); 方法,这个方法内部又有 installDecor(); 方法,在 installDecor() 中会根据不同的 Theme ,创建不同的 DecorView,DecorView 是一个 FrameLayout。
这时只是创建了 PhoneWindow,和DecorView,但目前二者也没有任何关系,产生关系是在ActivityThread.performResumeActivity 中,再调用 r.activity.per