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

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

相关推荐
kymjs张涛2 小时前
OpenClaw 学习小组:初识
android·linux·人工智能
程序设计实验室4 小时前
经历分享,发现挖矿木马后,服务器快速备份与重装(腾讯云平台)
linux
范特西林6 小时前
实战演练——从零实现一个高性能 Binder 服务
android
Miku166 小时前
OpenClaw-Linux+飞书官方Plugin安装指南
linux·人工智能·agent
Miku166 小时前
OpenClaw 接入 QQ Bot 完整实践指南
linux·人工智能·agent
范特西林6 小时前
代码的生成:AIDL 编译器与 Parcel 的序列化艺术
android
范特西林6 小时前
深入内核:Binder 驱动的内存管理与事务调度
android
范特西林7 小时前
解剖麻雀:Binder 通信的整体架构全景图
android
范特西林7 小时前
破冰之旅:为什么 Android 选择了 Binder?
android
奔跑中的蜗牛6668 小时前
一次播放器架构升级:Android 直播间 ANR 下降 60%
android