不知不觉Activity启动系列博客已经更新到系列七来了,这其中的不容易和艰辛只有自己知道了。前面的几章主要是重点分析了Activity启动过程中的涉及的前两个阶段请求阶段和进程创建阶段,上述两个阶段成果为我们的Activity的启动和显示构建好了稳定的外部环境和载体,但是革命尚未成功同志仍需努力啊!在这一篇章中我们将重点介绍Android是怎么开启目标Activity生命周期如下小阶段的:
-
真正启动目的端Activity
-
通过反射加载目标Activity
-
执行目标Activity生命周期
-
1.1 ASS.attachApplicationLocked(…)
-
尼玛!这里又是一个attachApplicationLocked方法,是不是搞错了,真没有错!最外层的attachApplicationLocked是针对AMS的,而这里的attachApplicationLocked方法是针对ASS的。
该方法取名为attachApplication(),顾名思义就是给ASS绑定一个应用,那么,ASS中有什么需要被绑定到一个应用进程的呢?如果小伙们是从Actiivity启动的请求阶段一路走过来那就知道当然是AcivityRecord了。我们在启动目标Activity时创建或者复用了一个新的ActivityRecord,并将其挪到了Stack的栈顶位置,当时,ActivityRecord还没有关联到任何进程相关的信息,还不能被迁移到显示状态。当应用进程被创建之后,Activity才有了运行的机会,这时候才会真正调度我们前面的ActivityRecord。
此方法很霸气啊,真的启动Activity!感觉有点像我们小时候过年走亲戚,快要出门的时候大声对主人家说,我真的要告辞了啊(意外之意就是主人家,得准备好红包给我们小孩了)!而这里的弦外之音,我们可以理解我就是要开启Activity的相关生命周期了,即我们应用开发者所熟知的onCreate()/onStart()等方法的调度,这应该就是这里真正启动Activity的真正含义吗!
-
接着调用目标Activity的attach()将前面创建相关的数据结构,传递到目标Activity中
-
接着如果在AndroidManifest中有配置了目标Activity主题,则设置相关主题,否则使用默认的
-
接着调用callActivityOnCreate()方法,进而开始执行目标Activity对象的onCreate方法,至此Actiivty进入其生命周期的开始
-
接着调用performStart(),开始目标Activity生命周期的另一征程onStart()方法

(编辑:鹰潭站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|