Activity、Window及View之间的关系
我们在研究Android中Activity和PhoneWindow(它是Window的子类)及DecorView(根级View)之间的关系时,其实时从Activity.setContentView()入手。
我们知道在Activity.attach中创建了唯一对应的PhoneWindow类,此时建立了Activity与PhoneWinow的绑定关系,其实Activity只是PhoneWindow的载体,它里面要展示的UI内容依赖PhoneWindow,所以Activity.setContentView()即是调用PhoneWindow.setContentView()。
那么接下来我们就看看PhoneWindow.setContentView()中做了什么
我们看到在PhoneWindow中初始化了DecorView(它是继承FrameLayout),那么我们的布局View是怎样被绑定添加到这DecorView中的呢,我们再来看看DecorView的初始化是怎么做的
我们看到创建完DecorView之后还会创建一个基于ViewGroup的mContentParent类,而我们的布局View也是添加到mContentPatent上。
综上所分析,Activity和Window及View关系如下图所示