App启动流程,Activity启动及AMS分析

AMS分析「 Activity启动流程 」- https://www.jianshu.com/p/501690f88f68
-- Activity启动及AMS分析:
在activity A中点击button启动activity B调用了 Activity的startActivity方法。1. Activity.startActivity- 2. Activity. startActivityForResult- 3. Instrumentation. execStartActivity - 4. AMS.startActivity - 5. AMS. startActivityAsUser - 6. startActivityMayWait - 7. startActivityLocked - 8. startActivityUncheckedLocked - 9. ActivityStack . startActivityLocked - 10. ActivityStackSuperVisor. resumeTopActivitiesLocked - 11. ActivityStack. resumeTopActivityInnerLocked - 

Android中一般情况下有以下几种ActivityStack
1:Home Stack,这个是Launcher所在的Stack。 其实还有一些系统界面也运行在这个Stack上,例如近期任务.SystemUI等
2:FullScreen Stack,全屏的Activity所在的Stack。 但其实在分屏模式下,Id为1的Stack只占了半个屏幕。
3:Freeform模式的Activity所在Stack
4:Docked Stack 下文中我们将看到,在分屏模式下,屏幕有一半运行了一个固定的应用,这个就是这里的Docked Stack
5:Pinned Stack 这个是画中画Activity所在的Stack
第一个和第二个是较常用的Stack,后边三个的Stack主要和多窗口模式有关。由此可见,大部分应用程序其实都是在同一个Stack中即FullScreenStack中。然后调用startActivityLocked方法继续启动Activity.

> Activity启动流程:
 1.调用Activity的startActivity方法来启动目标Activity
 2.调用Instrumentation的方法execStartActivity方法,方便Instrumentation对交互进行监测
 3.以上部分是在App1的进程中执行,之后会通过进程间通信调用到AMS服务中调用AMS的startActivity方法。此时进入SystemServer进程。
 4.然后由AMS中管理Acticity核心调度的类ActivityStackSupervisor的方法startActivityMayWait来处理。该方法中主要是根据Intent从PMS中查询目标Activity的信息
 5.ActivityStackSuperVisor的startActivityLocked方法主要是在AMS中找调用进程的processRecord信息,调用Activity的ActivityRecord信息,目标Activity还没有启动,所以需要先创建一个目标Activity的ActivityRecord信息。
 6.ActivityStackSuperVisor的StartActivityUncheckedLocked方法主要来处理启动模式相关的逻辑,根据不同的启动模式,找到相应的对的Task,然后又相应的Task进行处理
 7.ActivityStack将目标Activity加入到对应的Task顶部
 8.调用ActivityStackSuperVisor的resumeTopActivityLocked方法找到处于前台的Stack,然后调用它的resumeTopActivityLocked方法激活目标Activity.
 9.当前的Stack的栈开始Pasuing调用的Activity

展开阅读全文

没有更多推荐了,返回首页