Android App启动流程

1.通过 Launcher 启动应用时,点击应用图标后,Launcher 调用 startActivity 启动应用。

2.Launcher Activity 最终调用 Instrumentation 的 execStartActivity 来启动应用。

3.Instrumentation 调用 ActivityManagerProxy (ActivityManagerService 在应用进程的一个代理对象) 对象的 startActivity 方法启动 Activity。

4.到目前为止所有过程都在 Launcher 进程里面执行,接下来 ActivityManagerProxy 对象跨进程调用 ActivityManagerService (运行在 system_server 进程)的 startActivity 方法启动应用。

5.ActivityManagerService 的 startActivity 方法经过一系列调用,最后调用 zygoteSendArgsAndGetResult 通过 socket 发送给 zygote 进程,zygote 进程会孵化出新的应用进程。

6.zygote 进程孵化出新的应用进程后,会执行 ActivityThread 类的 main 方法。在该方法里会先准备好 Looper 和消息队列,然后调用 attach 方法将应用进程绑定到 ActivityManagerService,然后进入 loop 循环,不断地读取消息队列里的消息,并分发消息。

7.ActivityManagerService 保存应用进程的一个代理对象,然后 ActivityManagerService 通过代理对象通知应用进程创建入口 Activity 的实例,并执行它的生命周期函数。

相关推荐
程序员陆业聪18 小时前
技术选型决策树:什么团队、什么项目该选什么框架 | 跨平台框架深度对决(4)
android
星辰徐哥19 小时前
Rust异步测试与调试的实践指南
android·java·rust
星河耀银海19 小时前
C++ 运算符重载:自定义类型的运算扩展
android·java·c++
阿巴斯甜20 小时前
Activity 之间大量数据传递有哪些方案?
android
阿巴斯甜20 小时前
必看1
android
帅次21 小时前
副作用 API:LaunchedEffect、DisposableEffect、SideEffect
android·compose·disposable·sideeffect·launched·ondispose
流年如夢1 天前
单链表的应用 --> 简单通讯录的实现
android·数据结构·链表
用户86022504674721 天前
Jetpack ViewModel 入门与实践
android
随遇丿而安1 天前
第3周:按钮这件小事,真正麻烦的是“点完以后”
android
峥嵘life1 天前
五一南昌第三天游玩记录:梅景寻芳,母校忆旧,摩天轮揽夜
android