美文网首页
Activity启动流程简述

Activity启动流程简述

作者: 浪里_个郎 | 来源:发表于2020-06-06 15:04 被阅读0次

Launcher启动

SystemServer.main

SystemServer组件是由Zygote进程负责启动的,初始化系统服务

PackageManagerService.main

启动PMS,launcher需要从PMS中取所有安装的应用信息

ActivityManagerService.setSystemProcess

调用mSystemThread.installSystemApplicationInfo函数来把应用程序框架层以下的android包载入进

ActivityManagerService.systemReady

ActivityStack.resumeTopActivityLocked

调用ActivityManagerService.startHomeActivityLocked(),启动launcher。当时是发送CATEGORY_HOME类型的intent,具体启动哪个launcher应用,由系统设置决定

普通Activity启动

1,startActivity

Activity.startActivity //通过Activity类来拉起自己
Instrumentation.execStartActivity //由Instrumentation中转
ActivityManager.getService().startActivity //交给AMS的Proxy
ActivityManagerProxy.startActivity //和AMS进行binder通信

2,AMS处理当前栈顶Activity

ActivityManagerService.startActivity
ActivityStack.startActivityLocked //这里影响的是当前栈顶的Activity
ApplicationThreadProxy.schedulePauseActivity //Pause掉当前栈顶的Activity,会产生生命周期变化

3,当前栈顶Activity被干掉

ApplicationThread.schedulePauseActivity
ApplicationThread并不是应用的线程,它是一个binder,最主要的工作就是和AMS交互。

4,AMS要开始目标Activity的处理了

ActivityManagerService.activityPaused //收到之前栈顶Activity已经Pause的通知
//首先AMS会检查目标Activity进程是否存在,如果存在就通知该进程启动目标Activity,不存在则新建进程
ActivityManagerService.startProcessLocked
Process.start //从Zygote fork进程

5,目标Activity进程启动

ActivityThread.main //启动主线程的main函数

6,AMS绑定目标进程

ActivityManagerService.attachApplication
ActivityStack.realStartActivityLocked //Task栈真正去启动Activity。Activity配置的启动模式会产生影响

7,目标Activity开始干活

ApplicationThread.scheduleLaunchActivity
ActivityThread.queueOrSendMessage
H.handleMessage //我们主线程的Handler开始干活了!
ActivityThread.handleLaunchActivity
Instrumentation.newActivity //从第一部就露过脸的大佬终于又出现了,一个Application进程有一个Instrumentation来管理所有Activity的生命周期
Instrumentation.callActivityOnCreate
Activity.onCreate //熟悉的生命周期终于来了!目标Activity终于启动了

相关文章

网友评论

      本文标题:Activity启动流程简述

      本文链接:https://www.haomeiwen.com/subject/htbxtktx.html