【Android面试八股文】Android应用进程的启动流程【二】
应用进程
1.1 Android系统进程的启动过程:
1、init进程fork出Zygote进程后,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来说,
- AMS向Zygote发起启动应用的socket请求,Zygote收到请求fork出进程,返回进程的pid给AMS;
- 应用进程启动好后,执行入口main函数,通过attachApplication方法告诉AMS已经启动,同时传入应用进程的binder句柄IApplicationThread。
完成这两步,应用进程的启动过程才算完成。
1.3.1 流程图

综上,Android应用进程的启动可以总结成以下步骤:
- 点击Launcher桌面的App图标
- AMS发起socket请求
- Zygote进程接收请求并处理参数
- Zygote进程fork出应用进程,应用进程继承得到虚拟机实例
- 应用进程启动binder线程池、运行ActivityThread类的main函数、启动Looper循环
1.4 总图
1.4.1 系统启动流程图自绘

1.4.2应用启动流程图




相关文章:
【Android面试八股文】Android应用进程的启动流程【二】
应用进程 1.1 Android系统进程的启动过程: 1、init进程fork出Zygote进程后,Zygote进程会创建一个服务端socket,等待AMS发起socket请求。 同时,由Zygote进程fork出的SystemServer进程会启动各项系统服务,其中就包含了A…...
“星睿O6” AI PC开发套件评测 - 部署PVE搭建All in One NAS服务器
Radxa O6平台上部署PVE搭建All in One NAS服务器 Radxa O6是一款性能卓越的单板计算机,其强劲的硬件配置和多样化的接口设计,使其成为家庭和小型企业理想的All in One服务器解决方案。值得一提的是,O6原生配备了两个5G网口,便于直…...
16.使用豆包将docker-compose的yaml转为k8s的yaml,安装各种无状态服务
文章目录 docker方式httpbinit-toolslinux-commandmyipreference docker-compose安装k8s方式 docker方式 httpbin A simple HTTP Request & Response Service https://httpbin.org/ https://github.com/postmanlabs/httpbin https://github.com/mccutchen/go-httpbin do…...
全志H5,NanopiKP1lus移植QT5.12记录
移植步骤 机器环境下载QT5.12.0源码安装交叉编译器修改qmake.conf文件配置编译选项qt5的configure选项说明基本配置选项编译器和链接器选项功能模块配置第三方库集成注意事项 配置过程报错解决配置完成编译过程报错解决编译完成将arm-qt文件夹传送到开发板配置板子环境变量运行…...
定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
上一章中,我给大家介绍了 SM4 在 BoringSSL 上的移植要点,本来计划本章介绍 SM2 算法的移植要点。在移植 SM2 过程中,遇到了一个拦路虎,所以先扫除这个拦路虎,这就是错误码的定义问题。 在铜锁中,引入了几个错误码和错误字符串,在文件 sm2_err.c 中: static const ER…...
使用EXCEL绘制平滑曲线
播主播主,你都多少天没更新了!!!泥在干什么?你还做这个账号麻?!!! 做的做的(哭唧唧),就是最近有些忙,以及…… 前言&…...
Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
HTOC(十字军的试炼)副本中各个BOSS的ID如下: 629 - 诺森德野兽 633 - 加拉克苏斯大王 637 - 派系冠军 641 - 瓦格里双子 645 - 阿努巴拉克 encounterID!637 and encounterID!641 encounterID NOT IN (637,641) 伤害 …...
【笔记】网络安全管理
计算机硬件中,运算器和控制器通常集成在一块芯片内,一般称为()。 数据库DB、数据库系统DBS、数据库管理系统DBMS,三者之间的关系是()。 OSI/RM体系结构中的网络层与TCP/IP体系结构中的&#x…...
在服务器上部署MinIO Server
MinIO的优势 高性能:MinIO号称是目前速度最快的对象存储服务器,据称在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s,可惜我的磁盘跟不上 兼容性:MinIO基于Amazon S3协议,并提供了与S3兼…...
一个改善Entity Framework异常处理和错误信息的开源项目
使用DDD从零构建一个完整的系统 使用Entity Framework作为ORM框架应该是绝大多数项目的选择,使得我们操作数据库变得简单方便;但是我们操作数据库,绝对是无法避免数据库发生异常的情况,数据库针对每一种异常也都会提供一个编码来…...
计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪
1. 概述 目标检测(Object Detection)和目标追踪(Object Tracking)是计算机视觉中的两个关键技术,它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象࿰…...
PHP使用pandoc把markdown文件转为word
文章目录 首先安装pandocPHP处理 服务器操作系统是Linux,centos 首先安装pandoc yum install -y pandoc安装完成后输入如下代码,检查安装是否成功 pandoc --versionPHP处理 我把markdown内容存到了数据库里,所以要从数据库读取内容。对内容…...
第二十四天 - 分布式任务队列 - Celery高级应用 - 练习:分布式监控任务系统
一、Celery核心机制解析 1.1 分布式架构四要素 # celery_config.py BROKER_URL redis://:passwordlocalhost:6379/0 # 消息中间件 RESULT_BACKEND redis://:passwordlocalhost:6379/1 # 结果存储 TASK_SERIALIZER json ACCEPT_CONTENT [json] TIMEZONE Asia/Shanghai核…...
针对MCP认证考试中的常见技术难题进行实战分析与解决方案分享
一、身份与权限管理类难题 场景1:Active Directory组策略(GPO)不生效 问题现象:客户端计算机未应用新建的组策略。排查步骤: 检查GPO链接顺序:使用gpresult /r查看策略优先级,确保目标OU的GPO…...
【滑动窗口】最⼤连续 1 的个数 III(medium)
⼤连续 1 的个数 III(medium) 题⽬描述:解法(滑动窗⼝):算法思路:算法流程: C 算法代码:Java 算法代码: 题⽬链接:1004. 最⼤连续 1 的个数 III …...
OBS 日期时间.毫秒时间脚本 date-and-time.lua
文章目录 OBS 日期时间.毫秒时间脚本:效果 OBS 日期时间.毫秒时间脚本: obs obslua source_name ""last_text "" format_string "" activated false-- 此函数用于获取精确的毫秒级时间戳&#…...
探索大语言模型(LLM):目标、原理、挑战与解决方案
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言语言模型的目标语言模型的数学表示语言模型面临的挑战解决参数量巨大的方法1. 马尔可夫假设2. 神经网络语言模型3.自监督学习4. 分布式表示 脑图总结 前言 在自…...
ES基本操作(Java API)
1. 导入restClient依赖 <!-- es --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency> <!…...
得物官网sign签名逆向分析
打开得物官网,点击鞋类,可以看到请求 直接搜sign function p(e) {return f()("".concat(e ? s()(e).sort().reduce(function(t, n) {return "".concat(t).concat(n).concat(e[n])}, "") : "", "048a9…...
Agent的九种设计模式 介绍
Agent的九种设计模式 介绍 一、ReAct模式 原理:将推理(Reasoning)和行动(Acting)相结合,使Agent能够在推理的指导下采取行动,并根据行动的结果进一步推理,形成一个循环。Agent通过生成一系列的思维链(Thought Chains)来明确推理步骤,并根据推理结果执行相应的动作,…...
vivado 时钟IP核(MMCM PLL)
CMT简介 FPGA中时钟管理模块(CMT)包括PLL和MMCM,用于将时钟倍频(比如输入时钟25M,我们要产生50M时钟)、分频(在不影响系统功能的前提下,较低的工作时钟,能够降低系统功耗)、改变相位偏移或占空比等。 当需要…...
hackmyvm-airbind
收集信息 arp-scan -l nmap -sS -v 192.168.195.162 访问扫描到的ip,直接跳转到登录页面,利用admin/admin弱口令登录 在settings.php中找到一处文件上传,上传一句话木马,上传成功 反弹shell 上传php-reverse-shell.php 抓包&am…...
知识了解03——怎么解决使用npm包下载慢的问题?
1、为什么使用npm下载包会下载的慢 因为使用npm下载包时,默认使用国外服务器进行下载,此时的网络传输需要经过漫长的海底电缆,因此下载速度会变慢 2、怎么解决?(切换镜像源) (1)方…...
[晕事]今天做了件晕事71,_GNU_SOURCE
今天碰到一件晕,从别的地方搬运来一段代码,里面有使用in6_pktinfo这个结构体: struct in6_pktinfo pktinfo; 通过搜索发现需要include的头文件就是:netinet/in.h。加上这个头文件,还是出现找不到结构体的错误。最后通过仔细查看头文件,发现,这个结构体定义是在宏判断里…...
【算法数据结构】leetcode37 解数独
37. 解数独 - 力扣(LeetCode) 题目描述: 题目要求每一行 ,每一列,每个3*3 的子框只能出现一次。每个格子的数字范围1-9. 需要遍历每个空格填入可能的数字,并验证符合规则。如果符合就填入,不符…...
招商信诺原点安全:一体化数据安全管理解决方案荣获“鑫智奖”!
近日,“鑫智奖 2025第七届金融数据智能优秀解决方案评选”榜单发布,原点安全申报的《招商信诺:数据安全一体化管理解决方案》荣获「信息安全创新优秀解决方案」。 “鑫智奖第七届金融数据智能优秀解决方案评选”活动由金科创新社主办&#x…...
楼宇自控系统如何为现代建筑打造安全、舒适、节能方案
在科技飞速发展的当下,现代建筑对功能和品质的要求日益提升。楼宇自控系统作为建筑智能化的核心技术,宛如一位智慧的“管家”,凭借先进的技术手段,为现代建筑精心打造安全、舒适、节能的全方位解决方案,让建筑真正成为…...
吃透LangChain(四):消息管理与聊天历史存储
消息存储在内存 下面我们展示一个简单的示例,其中聊天历史保存在内存中,此处通过全局 Python 字典实现。我们构建一个名为 get_session_history 的可调用对象,引用此字典以返回chatMessageHistory实例。通过在运行时向 RunnablewithMessageHi…...
【差分隐私相关概念】瑞丽差分隐私(RDP)命题4
命题4的证明详解(分情况讨论) 背景与设定 机制: f : D → R f: \mathcal{D} \to \mathcal{R} f:D→R 是由 n n n 个 ϵ \epsilon ϵ-差分隐私机制自适应组合而成。相邻输入: D D D 和 D ′ D D′ 是相邻数据集。目标…...
RoBoflow数据集的介绍
https://public.roboflow.com/object-detection(该数据集的网址) 可以看到一些基本情况 如果我们想要下载,直接点击 点击图像可以看到一些基本情况 可以点击红色箭头所指,右边是可供选择的一些yolo模型的格式 如果你想下载…...


