当前位置: 首页 > news >正文

【Android面试八股文】Android应用进程的启动流程【二】

应用进程

1.1 Android系统进程的启动过程:

1、init进程forkZygote进程后,Zygote进程会创建一个服务端socket,等待AMS发起socket请求。

同时,由Zygote进程fork出的SystemServer进程会启动各项系统服务,其中就包含了AMS,AMS会启动Launcher桌面,此时就可以等待用户点击App图标来启动应用进程了。

2、然后看下系统服务的启动,不管是由init进程启动的独立进程的系统服务SurfaceFlinger,还是由SystemServer进程启动的非独立进程的系统服务AMS,都是在ServiceManager进程中完成注册和获取的,在跨进程通信上使用了Android的binder机制

ServiceManager进程本身也是一个系统服务,经过启动进程启动binder机制发布自己等待请求4个步骤,就可以处理其他系统服务的获取和注册需求了。

1.2  Android系统服务的启动过程:

1.3 AMS发送socket请求

Android应用进程的启动是被动式的,在Launcher桌面点击图标启动一个应用的组件如Activity时,如果Activity所在的进程不存在,就会创建并启动进程。

点击App图标后经过层层调用会来到ActivityStackSupervisor的startSpecificActivityLocked方法,

//ActivityStackSupervisor.java
final ActivityManagerService mService;void startSpecificActivityLocked(...) {//查找Activity所在的进程,ProcessRecord是用来封装进程信息的数据结构ProcessRecord app = mService.getProcessRecordLocked(...);//如果进程已启动,并且binder句柄IApplicationThread也拿到了,那就直接启动Activityif (app != null && app.thread != null) {realStartActivityLocked(r, app, andResume, checkConfig);return;}//否则,让AMS启动进程mService.startProcessLocked(...);
}

app.thread并不是线程,而是一个binder句柄。应用进程使用AMS需要拿到AMS的句柄IActivityManager,而系统需要通知应用和管理应用的生命周期,所以也需要持有应用进程的binder句柄IApplicationThread。

也就是说,他们互相持有彼此的binder句柄,来实现双向通信

所以对于AMS来说,

  1. AMS向Zygote发起启动应用的socket请求,Zygote收到请求fork出进程,返回进程的pid给AMS;
  2. 应用进程启动好后,执行入口main函数,通过attachApplication方法告诉AMS已经启动,同时传入应用进程的binder句柄IApplicationThread。

完成这两步,应用进程的启动过程才算完成。

1.3.1 流程图

综上,Android应用进程的启动可以总结成以下步骤:

  1. 点击Launcher桌面的App图标
  2. AMS发起socket请求
  3. Zygote进程接收请求并处理参数
  4. Zygote进程fork出应用进程,应用进程继承得到虚拟机实例
  5. 应用进程启动binder线程池、运行ActivityThread类的main函数、启动Looper循环

1.4 总图 

1.4.1 系统启动流程图自绘

1.4.2应用启动流程图

相关文章:

  • 在服务器上部署MinIO Server
  • 山东科技大学人工智能原理复习资料
  • JCST 2025年 区块链论文 录用汇总
  • 【HDFS】EC重构过程中的校验功能:DecodingValidator
  • 硬件操作指南——ATK-MD0430 V20
  • 五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)
  • 如何基于区块链进行虚拟电厂运营平台建设?
  • 实现批量图片文字识别(python+flask+EasyOCR)
  • 备份jenkins
  • MCP是什么?为什么突然那么火?
  • 文档内容提取以及合成
  • kafka认证部署
  • 李宏毅NLP-5-RNNTNeural TransducerMoChA
  • LPDDR中读操作不存在Additive Latency(AL)的技术思考
  • Python scikit-learn 机器学习算法实践
  • 2025年KBS SCI1区TOP:增强天鹰算法EBAO,深度解析+性能实测
  • 指针函数和函数指针
  • C++游戏服务器开发之⑦redis的使用
  • MAUI项目iOS应用以进 App Store 分发
  • 免费将AI生成图像放大4倍的方法
  • 大悦城:去年净亏损29.77亿元,三年累计亏损超70亿元
  • 恒安集团创始人许连捷逝世:白手起家缔造百亿纸品巨头,个人曾捐赠超10亿
  • 2025年世界互联网大会亚太峰会人工智能大模型论坛举行
  • 14岁男孩膀胱内现52颗磁力珠,专家呼吁关注青春期少年心理健康
  • 美国佛罗里达州立大学枪击事件已致2人死亡
  • 《素食者》的植物隐喻仍暗含“肉食”逻辑