androidactivity源码分析 (android activity启动流程详解)

在我们平时的开发中,我们知道通过setContentView(int layoutResID)来设置需要显示的界面,但是系统是怎么加载显示出来的,却很少了解.本篇文章通过深入源码来分析其加载原理.

我们先来看一下Activity的界面层级结构,话不多说,先上图:

androidactivity布局,android怎么加载activity文件

如图所示,整个界面层级从Activity->PhoneWindow->DecorView->screen_simple_LinearLayout->R.id.content,在activity中,我们通常将setContentView中的布局文件最终设置到R.id.content上来显示.

下面我们来看Activity是如果布局文件显示出来的.

  1. 当我们在Activity的onCreate中调用setContentView时,进入Activity.java源码:

androidactivity布局,android怎么加载activity文件

Activity.java

2.Activity中的setContentView调用了PhoneWindow中的setContentView.进入PhoneWindow.java源码:

androidactivity布局,android怎么加载activity文件

PhoneWindow.java

3.如果PhoneWindow中的DecorView为空,则需要调用installDecor()创建DecorView.

androidactivity布局,android怎么加载activity文件

phoneWindow.java

4.installDecor方法通过generateDecor(),传入featureId=-1,来创建DecorView.

androidactivity布局,android怎么加载activity文件

5. mContentParent = generateLayout(mDecor),通过DecorView中的R.id.content,获取mContentParent.

androidactivity布局,android怎么加载activity文件

6.最后在2中,将调用 mLayoutInflater.inflate(layoutResID, mContentParent);将布局文件设置到mContentParent中,也就是布局文件的FragmentLayout.

androidactivity布局,android怎么加载activity文件

R.layout.screen_simple

7.最终页面是显示在FragmentLayout上,现在我们再回到第一张图,是不是对整个布局加载流程很清晰了.

今天我们的分享到此结束了,如果还有问题的小伙伴,欢迎评论区留言,我会及时回复的哦!