android 启动优化方向跟踪

先简单带过framwork以上的流程,主要看framwrok里面的步骤

一 前期启动流程速览

1 kernel内核空间启动 负责启动 native层的init进程

具体可以参考linux内核(

Bootloader启动Kernel的swapper进程(pid=0),它是内核首个进程,用于初始化进程管理、内存管理、加载各种驱动。更重要的是启动如下两个重要进程:

init进程(pid=1):用户进程的鼻祖

threadd进程(pid=2):内核进程的鼻祖

这层真正大主管是threadd进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。)

2 natve层init是管家,它负责孵化各种系统级服务、守护进程等。最重要的是孵化出Zygote进程:Java进程的鼻祖。 主要负责创建 framworkd层的zygote进程

3 Framework层:在Native之上,也是用户空间,主要给app层提供api以及系统服务

这层大主管是 Zygote进程。它负责注册Zygote Socket服务端套接字,加载虚拟机,preloadClasses和preloadResouces。

通过startSystemServer(),fork得力帮手system_server进程,也是上层framework系统服务的运行载体

zygote功成身退,调用runSelectLoop(),随时待命,当接收到请求创建新进程请求时立即唤醒并执行相应工作

4 System Server进程:负责启动和管理整个Java framework,包含AMS、WMS、PMS等服务

systemserver启动流程参考下面的图片,就是PHASE_*7中状态阶段

但我们需要关注更细节的流程,因为优化工作主要在最后两个状态阶段,也就是wms 和ams的那里面的启动部分

二 启动后期流程分析

ams和wms部分

在startotherservices 里面 systemserver 在调用ams.systemReady()之前,我们会自定义自己的定制服务,比如YangProcessManagerInternal:进程管理的类,检测anr,died,cpu,gpu等过高状态并提供杀死的功能

接着往下,ams的systemReady,这里会启动 StartCarServiceHelperService,就是car相关的

然后 mPackageManagerService.waitForAppDataPrepared();等待 all packages to be prepared

然后 更新systemserver的启动状态:mSystemServiceManager.startBootPhase(t, SystemService.PHASE_THIRD_PARTY_APPS_CAN_START);

接下来startPersistentApps,然后startHomeOnAllDisplays-这里没有直接启动launcher的intent

而是跑到 RouteWindowContainer里面作了些逻辑(多个launcher,双屏)然后才

mService.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason,

taskDisplayArea);

这样的话,launcher也是启动了

接着等launcher idel后,通知ams(确切的说是 ActivityTaskManagerService),厂商会在这里启动一些自己的app

接着更新systemserver的启动状态 mSystemServiceManager.startBootPhase(t, SystemService.PHASE_BOOT_COMPLETED);

然后 enableScreenAfterBoot调用wms 关闭动画(TAG:enableScreenAfterBoot)这里会延时30s强制关闭动画,防止卡在这里。

接下来优化相关问题及扩展

相关推荐
2601_9632827729 分钟前
寒地窄带通信工程实践:黑龙江哈尔滨对讲机选型、组网与合规运维总结
运维·服务器·网络
叼烟扛炮1 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
xbzb2 小时前
OpenStack 网络管理(理论):Linux 网络虚拟化是 Neutron 的地基
linux·服务器·网络·openstack·network·neutron
我要见SA姐13 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
传奇开心果编程3 小时前
【Jetpack Compose娓娓道来】第29课:状态容器与UI事件建模——把“散装状态”变成“可穷举的契约”
android·kotlin·移动开发·android jetpack·ui框架·开发范式·声明式ui
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
五彩小白4 小时前
喵呜打卡项目总结
android·团队开发
水饺编程4 小时前
第2章:Linux 基础,解压缩【.tar.bz2】压缩包文件
linux·c语言·汇编
Y3815326624 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
Zevalin爱灰灰5 小时前
Linux入门第二部分(ARM裸机篇) 第二章 Cortex-A7 MPCore架构与ARM汇编基础
linux·汇编·arm开发·嵌入式