Activity#setContentView的具体过程。

2020-12-30  本文已影响0人  Android刘东
Activity.java
  final void attach(){
    mWindow = new PhoneWindow(this, window, activityConfigCallback);
  }

个人理解PhoneWindow有个DecorView属性,Activity 中 View 相关的操作其实大都是通过 DecorView 来完成。

 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

上一篇 下一篇

猜你喜欢

热点阅读