Activity(下)- 启动过程模式略解

前面讲了一些基本的activity知识,对于应用层的开发人员来说,我感觉是够用了,但是作为一个年轻人,还是要有点探索精神的,所以我写了这一节,试着从安卓底层描述一下activity的具体启动过程。首先附上参考资料,本人也是刚工作半年多的菜鸟,经验有限。
参考资料一 Android应用程序的Activity启动过程简要介绍和学习计划
参考资料二 Android M 5.0,关于ActivityThread和ApplicationThread的解析.
首先上一张图

Activity(下)- 启动过程模式略解_第1张图片
转自资料 图 1.1

这四个类(接口),暂时不需要知道是干嘛用的,先来描述一下他的启动过程。
ActivityManagerService(以下称为AMS)和ActivityStack 处于同一进程中,而ApplicationThread和ActivityThread处于另一个进程,对于任何应用来说,ActivityThread标会应用的主进程,而每一个ActivityThread都包含一ApplicationThread实例。对于这两个类,我从资料二得到的信息一就是activityThread持有ApplicationThread,ApplicationThread负责AMS 和ActivityThread 之间的通信。而且ApplicationThread是ActivityThread的内部类,继承自binder,实现了IApplicationThread接口。

写不下去了啊,附上大神链接
【凯子哥带你学Framework】Activity启动过程全解析
--------------------还是要写的,简要描述下吧----------------------------------------------------------

  1. 无论是通过launcher启动,还是通过内部activity启动新的activity,首先都会通过Binder进程间通信进入到ActivityManagerService进程,并且调用activityManagerService,startActivity接口
    2.AMS调用ActivityStack.startActivityMyWait 做准备工作

3 ActivityStack 通知applicationThread要进行启动调度,,这里了applicationThread代表的是AMS进程,,点击Launcher就是Launcher进程,activity内部就是发起调用的activity坐在进程。

4.ApplicationThread不执行真正的启动操作,他通过调用AMS.activityonPause接口进入到AMS进程,看看是否需要创建新进程。

5.对于点击Launcher来说,AMS 会调用startProcessLocked 创建新进程,对于activity内部来说,则不需要,新的activity会在发起的activity所在进程创建。

  1. AMS 调用ApplicationThr.scheduleLaunchActivity 接口,通知相应进程开始后续操作。

  2. ApplicationThread把启动Activity的操作转发给ActivityThread,ActivityThread通过ClassLoader导入相应的Activity类,然后真正启动
    `

你可能感兴趣的:(Activity(下)- 启动过程模式略解)