美文网首页
Activity#setContentView的具体过程。

Activity#setContentView的具体过程。

作者: Android刘东 | 来源:发表于2020-12-30 16:55 被阅读0次
  • ①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

相关文章

网友评论

      本文标题:Activity#setContentView的具体过程。

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