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

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

相关推荐
dora15 分钟前
使用 Cling 实现 DLNA 投屏:从局域网发现到媒体播放控制
android·android things·tvos
Amy1870211182324 分钟前
告别“爬楼抄表”时代:电梯计量自动化改造,让每一度电都“开口说话”
运维·自动化
dadaobusi31 分钟前
在 Buildroot 中为 RISC-V 64 架构集成 numactl
运维·服务器
weixin_307779131 小时前
Linux下Docker Compose里运行PostgreSQL数据库故障诊断Shell脚本
linux·运维·数据库·docker·postgresql
apihz1 小时前
全球域名 WHOIS 信息实时查询免费 API 接口教程,支持1000+后缀
android·网络·网络协议·tcp/ip·apache·域名·whois
AI创界者1 小时前
安全测试环境搭建:在 Kali Linux 中部署与配置开源 WebShell 管理工具 AntSword(蚁剑)
linux·运维·安全
猪头少年不会遇见算法学姐2 小时前
Makefile快速上手笔记
linux·学习
qiu_lovejun9982 小时前
linux安装docker和redis和rabbitmq和nginx和rocketmq和kafka
linux·redis·docker·kafka·rabbitmq·rocketmq
运维大师2 小时前
【Linux运维极简教程】04-进程与服务管理
linux·运维
keke.shengfengpolang2 小时前
自动化考什么证书对就业有帮助?
运维·自动化