加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.cn/)- 图像处理、低代码、云通信、数据工具、物联设备!
当前位置: 首页 > 教程 > 正文

Android四大组件之Activity启动流程源码

发布时间:2020-11-05 13:16:31 所属栏目:教程 来源:互联网
导读:不知不觉Activity启动系列博客已经更新到系列七来了,这其中的不容易和艰辛只有自己知道了。前面的几章主要是重点分析了Activity启动过程中的涉及的前两个阶段 请求阶段 和 进程创建阶段 ,上述两个阶段成果为我们的Activity的启动和显示构建好了稳定的外部

 

  不知不觉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()方法 
       

         

(编辑:鹰潭站长网)

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

    热点阅读