news 2026/6/13 21:57:13

安卓冷启动流程(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/6/13 9:22:49

TY1613机顶盒改造服务器终极指南:从闲置设备到全能神器

TY1613机顶盒改造服务器终极指南&#xff1a;从闲置设备到全能神器 【免费下载链接】amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic、Rockchip和Allwinner盒子构建的Armbian系统镜像&#xff0c;支持多种设备&#xff0c;允许用户将安卓TV系统更换为功能…

作者头像 李华
网站建设 2026/6/13 7:29:52

N_m3u8DL-RE:解锁VR视频下载新境界的完整攻略

N_m3u8DL-RE&#xff1a;解锁VR视频下载新境界的完整攻略 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器&#xff0c;支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 还在…

作者头像 李华
网站建设 2026/6/13 15:08:59

终极指南:3步搞定闲鱼监控登录状态,实现24小时自动值守

终极指南&#xff1a;3步搞定闲鱼监控登录状态&#xff0c;实现24小时自动值守 【免费下载链接】ai-goofish-monitor 基于 Playwright 和AI过滤的闲鱼多任务实时/定时监控与智能分析工具&#xff0c;配备了功能完善的后台管理界面。帮助用户节省闲鱼商品过滤&#xff0c;能及时…

作者头像 李华
网站建设 2026/6/13 20:52:48

终极视频防抖神器:GyroFlow快速上手全攻略

终极视频防抖神器&#xff1a;GyroFlow快速上手全攻略 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 想要告别视频抖动困扰&#xff0c;获得电影级稳定画面吗&#xff1f;GyroFlow作…

作者头像 李华
网站建设 2026/6/12 14:18:08

VR视频下载完全攻略:解锁360度全景体验新境界

VR视频下载完全攻略&#xff1a;解锁360度全景体验新境界 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器&#xff0c;支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 想要…

作者头像 李华
网站建设 2026/6/13 15:20:18

NewBie-image-Exp0.1完整指南:从镜像拉取到图片输出全流程详解

NewBie-image-Exp0.1完整指南&#xff1a;从镜像拉取到图片输出全流程详解 1. 引言&#xff1a;为什么选择 NewBie-image-Exp0.1 预置镜像&#xff1f; 你是否曾为部署一个动漫图像生成模型而烦恼&#xff1f;环境依赖复杂、源码Bug频出、权重下载缓慢——这些问题常常让刚入…

作者头像 李华