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/23 12:11:57

如何快速解锁WebOS:智能电视的终极破解指南

如何快速解锁WebOS&#xff1a;智能电视的终极破解指南 【免费下载链接】webos-homebrew-channel Unofficial webOS TV homebrew store and root-related tooling 项目地址: https://gitcode.com/gh_mirrors/we/webos-homebrew-channel 想要让你的LG智能电视发挥全部潜力…

作者头像 李华
网站建设 2026/4/17 15:21:14

Python机器学习在材料科学中的三大实战场景与解决方案

Python机器学习在材料科学中的三大实战场景与解决方案 【免费下载链接】Python All Algorithms implemented in Python 项目地址: https://gitcode.com/GitHub_Trending/pyt/Python GitHub_Trending/pyt/Python项目汇集了Python实现的各类算法&#xff0c;特别在材料科学…

作者头像 李华
网站建设 2026/4/23 12:13:14

如何验证模型加载成功?DeepSeek-R1-Distill-Qwen-1.5B调试技巧

如何验证模型加载成功&#xff1f;DeepSeek-R1-Distill-Qwen-1.5B调试技巧 1. 前言&#xff1a;为什么验证模型加载如此关键&#xff1f; 你有没有遇到过这种情况&#xff1a;服务启动了&#xff0c;界面也打开了&#xff0c;但一输入问题就卡住、报错&#xff0c;或者返回一…

作者头像 李华
网站建设 2026/4/22 23:00:16

Emotion2Vec+ Large如何保存结果?outputs目录结构全解析

Emotion2Vec Large如何保存结果&#xff1f;outputs目录结构全解析 1. Emotion2Vec Large语音情感识别系统二次开发指南 你是不是也遇到过这种情况&#xff1a;在Web界面点完“开始识别”&#xff0c;结果出来了&#xff0c;但回头想找到刚才的分析文件却无从下手&#xff1f…

作者头像 李华
网站建设 2026/4/22 13:58:28

3步快速修复Windows Defender故障的实用指南

3步快速修复Windows Defender故障的实用指南 【免费下载链接】no-defender A slightly more fun way to disable windows defender. (through the WSC api) 项目地址: https://gitcode.com/GitHub_Trending/no/no-defender 当你发现电脑安全防护突然失效&#xff0c;Win…

作者头像 李华
网站建设 2026/4/23 14:34:24

notepad--中文编码问题终极解决方案完整教程

notepad--中文编码问题终极解决方案完整教程 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 还在为跨平台文档乱码问题…

作者头像 李华