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强制关闭动画,防止卡在这里。

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

相关推荐
wb189几秒前
流编辑器sed
运维·笔记·ubuntu·云计算
成工小白1 小时前
【Linux】C语言模拟实现shell命令行(程序替换原理)
linux·运维·服务器
福理原乡大王3 小时前
Linux信号详解
linux·运维·服务器·c++·ubuntu·信号处理
锅锅是锅锅3 小时前
ubuntu调整硬盘大小-使用gparted
linux·ubuntu·硬盘·gparted
孙克旭_3 小时前
day031-Shell自动化编程-数组与案例
linux·运维·自动化
喜欢踢足球的老罗3 小时前
自动化模型管理:MediaPipe Android SDK 中的模型文件下载与加载机制
android·运维·自动化
遇见火星3 小时前
自动化KVM虚拟机创建脚本详解:从模板到高效部署的线上实践!
运维·自动化·kvm
火山引擎开发者社区3 小时前
TickIt:基于 LLM 的自动化 Oncall 升级
运维·自动化·火山引擎
潘yi.4 小时前
ELK1日志分析系统
linux·elk
자신을 변화시키다4 小时前
磁盘配额管理
linux·运维·服务器·ubuntu·磁盘管理