- ①PhoneWindow是何时创建的,它的作用是什么?
Activity.java
final void attach(){
mWindow = new PhoneWindow(this, window, activityConfigCallback);
}
个人理解PhoneWindow有个DecorView属性,Activity 中 View 相关的操作其实大都是通过 DecorView 来完成。
- ②setContentView中传递的资源文件是如何变成View对象的?
- ③布局文件对应的View对象是添加到哪里的?
1)Activity.java:
public void setContentView(@LayoutRes int layoutResID) {
getWindow().setContentView(layoutResID);//Window指向PhoneWindow
}
2)PhoneWindow.java:
public void setContentView(int layoutResID) {
mLayoutInflater.inflate(layoutResID, mContentParent);
//指向mContentParent.addView(layoutResID) mContentParent为ViewGroup
//mContentParent的由来
//ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT);
}
④Activity的布局是何时显示出来的?
ActivityThread.java
public void handleResumeActivity(){
View decor = r.window.getDecorView();
r.activity.makeVisible();
}
Activity.java
void makeVisible(){
mDecor.setVisibility(View.VISIBLE);
}
⑤ViewRootImpl是何时初始化的?它的作用是什么?
https://www.jianshu.com/p/9da7bfe18374