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强制关闭动画,防止卡在这里。
接下来优化相关问题及扩展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Scala---01】Scala『 Scala简介 | 函数式编程简介 | Scala VS Java | 安装与部署』

文章目录 1. Scala简介2. 函数式编程简介3. Scala VS Java4. 安装与部署 1. Scala简介 Scala是由于Spark的流行而兴起的。Scala是高级语言,Scala底层使用的是Java,可以看做是对Java的进一步封装,更加简洁,代码量是Java的一半。 因…

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书:MATLAB语音信号分析与合成(第2版) 链接(含配套源代码):https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码:32rf 基础入门视频: 视频链接: 清…

MCU自动测量单元:自动化数据采集的未来

随着科技的飞速发展,自动化技术在各个领域中的应用日益广泛。其中,MCU(微控制器)自动测量单元以其高效、精准的特性,成为自动化数据采集领域的佼佼者,引领着未来数据采集技术的革新。本文将深入探讨MCU自动测量单元的原理、优势以…

Vue2 - 完成实现ElementUI中el-dialog弹窗的拖拽功能(宽度高度适配,且关闭后打开位置居中)

我们在做后台管理系统时常用到ElementUI 中的 el-Dialog,但是官方文档并未我们提供 el-Dialog弹窗如何实现拖拽功能,我们通常需要思考如何让用户能够自由地拖动弹窗,在页面上调整位置以获得更好的用户体验。在下面的博客文章中,我们将实现如何为 ElementUI 的 el-Dialog 弹…

网络安全 SQLmap-tamper的使用

目录 使用SQLmap Tamper脚本 1. 选择合适的Tamper脚本 2. 在命令行中使用Tamper脚本 3. 组合使用Tamper脚本 4. 注意和考虑 黑客零基础入门学习路线&规划 网络安全学习路线&学习资源 SQLmap是一款强大的自动化SQL注入和数据库取证工具。它用于检测和利用SQL注入漏…

大数据005-hadoop003-了解MR及Java的简单实现

了解MapReduce MapReduce过程分为两个阶段:map阶段、reduce阶段。每个阶段搜键-值对作为输入和输出。 要执行一个MR任务,需要完成map、reduce函数的代码开发。 Hellow World 【Hadoop权威指南】中的以分析气象数据为例,找到每年的最高气温。…

基于Springboot的校园博客系统

基于SpringbootVue的校园博客系统 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 文章信息 系统公告 后台登录 后台首页 博主管理 文章分类管理 文章信息管理 举报投诉管…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录片段

全书共分15章:第1章是自动驾驶系统的概述(场景分类、开发路径和数据闭环等),第2章简介自动驾驶的基础理论,即计算机视觉和深度学习等,第3~4章是自动驾驶的软硬件平台分析,包括传感器…

面试:Redis

目录 一、缓存穿透 1、解决方案一: 2、解决方案二: 二、缓存击穿 1、解决方案一: 2、解决方案二: 三、缓存雪崩 1、解决方案一: 2、解决方案二: 3、解决方案三: 4、解决方案四&#x…

创建基于时间的 UUID

概述 在本文中,我们将会 对 UUIDs 和基于时间的 UUIDs(time-based UUIDs) 进行一些探讨。 当我们在对基于时间的 UUIDs 进行选择的时候,总会遇到一些好的方面和不好的方面,如何进行选择,也是我们将要简要…

数字签名学习

1 基本概念 数字签名是一种加密技术,用于验证信息来源的身份和数据的完整性。 就是对一个东西签上自己的名;收到的人可以验证这东西是你发的;这里是用数字的方式; 对字符串也可以签名,签名以后,还是一个…

《面向云计算的零信任体系第1部分:总体架构》行业标准正式发布

中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准:YD/T 4598.1-2024《面向云计算的零信任体系 第1部分:总体架构》(后简称“总体架构”),并于2024年7月1日正式施行。 该标准由中国信通院牵头&#xf…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

web安全---CSRF漏洞/OWASP-CSRFTester的使用

what 跨站请求伪造 Cross Site Request Forgery how 攻击者诱骗点击恶意网页,盗用(伪造)受害者的身份,以受害者的名义向服务器发送恶意请求,而这种恶意请求在服务端看起来是正常请求 CSRF&&XSS区别 他们最本质区别就…

什么是中间件?中间件有哪些?

什么是中间件? 中间件(Middleware)是指在客户端和服务器之间的一层软件组件,用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件,它可以在两个系统之间传递、处理、转换数据,以达到协…

ArcGIS基础:便捷分享图层包和地图包

1、分享图层包: 首先,选中要分享的数据,右键创建图层包,修改保存路径。 找到项目描述那一栏,将摘要、标签、描述都填写分享图层包的相关内容。 一切设置好之后,点击右上角的【分析】按钮。 点击分析之后…

linux下安装anaconda

顺手点个关注吧,谢谢! 一、下载安装包 https://repo.anaconda.com/archive/ 或者使用命令 wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh2.赋予权限并安装 # 给文件执行权限 chmod 777 Anaconda3-5.3.1-Linux-x86_64.sh# 执…

高频面试题:在浏览器搜索框中输入一个URL的完整请求过程?

相信很多小伙伴在校招或者社招面试中都遇到过这个问题 面试官:小伙子,了解 在浏览器搜索框中输入一个URL的完整请求过程吗?详细说说我:eeemm,不太清出具体的过程。整体过程应该是HTTP请求的过程。 如果在面试中不能很…

FinClip :可以让小程序脱离微信环境最快运行在自有App中

🧐 什么是FinClip? FinClip,一个可以让小程序脱离微信环境,最快运行在自有App中的神器。它支持在iPhone、Android、Windows、Linux、macOS、统信等平台下的应用中运行小程序,这意味着,无论是移动端、PC端&…

uniapp自定义返回事件(封装)

uniapp自定义返回事件 在我们使用uniapp时,我们导航栏一般都是自定义的,比如用uview框架的导航栏,那么返回事件通常会遇到以下几个问题 返回事件前需要做一些额外的处理 h5项目刷新页面后返回失效 返回按钮点击后到指定页面 如果只是监听返…