news 2026/4/23 6:26:12

安卓冷启动流程(Android 15)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓冷启动流程(Android 15)

大纲
Android触控事件处理机制
Zygote进程启动和应用进程创建流程
Handler消息机制
AMS的Activity组件管理
应用Application和Activity组件创建与初始化
应用UI布局与绘制
RenderThread渲染
SurfaceFlinger合成显示

桌面点击图标

Android 系统是由事件驱动的,而 input 是最常见的事件之一,用户的点击、滑动、长按等操作,都属于 input 事件驱动,其中的核心就是 InputReader 和 InputDispatcher。InputReader 和 InputDispatcher 是跑在 SystemServer进程中的两个 native 循环线程,负责读取和分发 Input 事件。整个处理过程大致流程如下:

1)InputReader负责从EventHub里面把Input事件读取出来,然后交给 InputDispatcher 进行事件分发;
2)InputDispatcher在拿到 InputReader获取的事件之后,对事件进行包装后,寻找并分发到目标窗口;
3)InboundQueue队列(“iq”)中放着InputDispatcher从InputReader中拿到的input事件;
4)OutboundQueue(“oq”)队列里面放的是即将要被派发给各个目标窗口App的事件;
5)WaitQueue队列里面记录的是已经派发给 App(“wq”),但是 App还在处理没有返回处理成功的事件;
6)PendingInputEventQueue队列(“aq”)中记录的是应用需要处理的Input事件,这里可以看到input事件已经传递到了应用进程;
7)deliverInputEvent 标识 App UI Thread 被 Input 事件唤醒;
8)InputResponse 标识 Input 事件区域,这里可以看到一个 Input_Down 事件 + 若干个 Input_Move 事件 + 一个 Input_Up 事件的处理阶段都被算到了这里;
9)App 响应处理Input 事件,内部会在其界面View树中传递处理。

从桌面点击应用图标启动应用,system_server的native线程InputReader首先负责从EventHub中利用linux的epolle机制监听并从屏幕驱动读取上报的触控事件,然后唤醒另外一条native线程InputDispatcher负责进行进一步事件分发。

InputDispatcher中会先将事件放到InboundQueue也就是“iq”队列中,然后寻找具体处理input事件的目标应用窗口,并将事件放入对应的目标窗口OutboundQueue也就是“oq”队列中等待通过SocketPair双工信道发送到应用目标窗口中。

桌面应用界面View中在连续处理一个ACTION_DOWN的TouchEvent触控事件和多个ACTION_MOVE,直到最后出现一个ACTION_UP的TouchEvent事件后,判断属于onClick点击事件,然后透过ActivityManager Binder调用AMS的startActivity服务接口触发启动应用的逻辑。

桌面启动应用

Launcher.java -> super.startActivitySafely()

Launcher启动后会将已安装应用程序的快捷图标显示到界面上,当我们点击应用程序的快捷图标时就会调用Launcher的startActivitySafely方法,如下所示。
正常会走super.startActivitySafely(v, intent, item);

publicclassLauncherextendsStatefulActivity<LauncherState>publicabstractclassStatefulActivity<STATE_TYPEextendsBaseState<STATE_TYPE>>extendsBaseDraggingActivitypublicabstractclassBaseDraggingActivityextendsBaseActivitypublicabstractclassBaseActivityextendsActivityimplementsActivityContext

从调用关系可以看出,会调到ActivityContext.java的startActivitySafely

ActivityContext.java -> startActivitySafely()

try{……}elseif(user==null||user.equals(Process.myUserHandle())){// Could be launching some bookkeeping activity// 调用startActivitycontext.startActivity(intent,optsBundle);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:44:05

Blockbench零基础速成:从安装到创作完整3D模型的终极指南

Blockbench零基础速成&#xff1a;从安装到创作完整3D模型的终极指南 【免费下载链接】blockbench Blockbench - A low poly 3D model editor 项目地址: https://gitcode.com/GitHub_Trending/bl/blockbench 你是否曾对3D建模望而却步&#xff1f;觉得Blender太复杂&…

作者头像 李华
网站建设 2026/4/18 8:06:45

如何用提示词精准分割图像?SAM3大模型镜像一键部署实战

如何用提示词精准分割图像&#xff1f;SAM3大模型镜像一键部署实战 你有没有遇到过这样的问题&#xff1a;想从一张复杂的图片里把某个物体单独抠出来&#xff0c;但手动画框太费时间&#xff0c;自动识别又总是不准&#xff1f;现在&#xff0c;有了 SAM3&#xff08;Segment…

作者头像 李华
网站建设 2026/4/19 21:35:26

终极网络流量监控指南:vFlow IPFIX/sFlow/Netflow收集器完全解析

终极网络流量监控指南&#xff1a;vFlow IPFIX/sFlow/Netflow收集器完全解析 【免费下载链接】vflow Enterprise Network Flow Collector (IPFIX, sFlow, Netflow) 项目地址: https://gitcode.com/gh_mirrors/vf/vflow 想要构建企业级网络流量监控系统却不知从何入手&…

作者头像 李华
网站建设 2026/4/2 7:07:17

如何用GyroFlow解决视频抖动问题:从航拍到Vlog的完整稳定指南

如何用GyroFlow解决视频抖动问题&#xff1a;从航拍到Vlog的完整稳定指南 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 你是否曾为航拍视频的剧烈抖动而烦恼&#xff1f;或者手持拍…

作者头像 李华
网站建设 2026/4/17 6:57:55

3步快速配置AI助手:60,000+开源项目的实战模板指南

3步快速配置AI助手&#xff1a;60,000开源项目的实战模板指南 【免费下载链接】agents.md AGENTS.md — a simple, open format for guiding coding agents 项目地址: https://gitcode.com/GitHub_Trending/ag/agents.md 你是否曾经为了配置AI编码助手而头疼&#xff1f…

作者头像 李华
网站建设 2026/4/19 2:58:08

中文语音合成新选择|基于科哥二次开发的Voice Sculptor镜像实战

中文语音合成新选择&#xff5c;基于科哥二次开发的Voice Sculptor镜像实战 你是否曾为找不到合适的中文语音合成工具而烦恼&#xff1f;市面上大多数TTS模型要么音色单一&#xff0c;要么操作复杂&#xff0c;更别提精准控制声音风格了。今天要介绍的这个项目——Voice Sculp…

作者头像 李华