android 启动过程的分析

Android App 启动过程分析 原文链接:http://harttle.com/2014/05/27/android-appstartup.html通过分析和修改Android 源码,分析 Android App 启动过程的时间消耗及性能瓶颈。本文包括源码编译与运行、源码修改与调试、数据收集与分析。分析了 App 启动过程中, Activity Manager Service 、Binder、Launcher和MainActivi 阅读详情

android 启动过程的分析

本文翻译自:https://thecyberfibre.com/android-boot-process/,来源于嘶吼: http://www.4hou.com/mobile/7373.html

基本核心过程

引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器 >管理器
该过程是Android启动的核心过程,下面让我来详细介绍每一步及其并行操作(如果有的话)。

引导ROM

一旦Android操作系统开始运行,就会执行负责“Boot ROM”部分的代码。起始代码恰好是预定义的硬编码位置,代码将引导加载程序加载到RAM中并开始执行。

引导程序

虽然引导程序只是Android系统的一小部分,但却非常重要。你可能已经听说过OEM或制造商放置的某些限制和规则,而引导程序正是存储所有这些“规则”的地方。一开始提到的“引导加载程序”的过程其实包括两个阶段:

第一阶段:检测RAM。引导加载程序检测RAM并执行启动第二步所需的应用程序。

第二步:设置。引导加载程序现在继续设置网络、低级内存管理和安全选项。
这一步对于执行内核至关重要。位于/ bootable / bootloader / legacy / usbloader的引导加载程序包含两个非常重要的文件,即init.s和main.c。

init.s文件基本上负责的是初始化栈, 0和BSS段,然后继续在main.c.中初始化call_main()。 main.c文件在并行创建Linux标签的同时初始化硬件,特别是时间,控制台和键盘。

内核

Android内核的初始化过程模仿的是Linux内核的初始化,当内核执行时,它将高速缓存,受保护的内存设置为不同的加载驱动程序。当完成所有设置和调度驱动程序后,内核会在系统文件中查找init。

初始化过程

init过程是相当重要的一步,这一步,不仅会安装/ sys和/ dev等目录或分区,还会启动init.rc脚本。 init进程位于/ init,而init.rc脚本位于/ rootdir。

Zygote 和Dalvil VM

Zygote是一个VM进程,会在系统启动时启动。它可以实现Dalvik VM的代码共享,从而有助于把启动时间降至最低。 Zygote还确保更低的内存占用,使Dalvik VM不会消耗大量内存。此外,它还会初始化核心库类。

Zygote加载过程的框架看起来与开头概述的框架完全相同:

加载Zygote init类 > registerZygoteSocket() > preloadClasses() > preloadResources() >用户看到启动的动画

系统服务器

在这一步,Zygote会要求一个新的过程,这样以下的过程才会启动,处理和执行。

启动电源管理器 >创建活动管理器 >启动电话注册表 >启动包管理器 >将活动管理器服务设置为系统进程 >启动上下文管理器 >启动系统联系人 >启动电池服务 >启动警报管理 >启动 >传感器服务 >启动窗口管理器 >启动蓝牙服务 >启动安装服务 >启动状态栏服务 >启动硬件服务 >启动NetStat服务 >启动连接服务 >启动通知管理器 >启动DeviceStorageMonitor服务 >启动位置管理器 >启动搜索服务 >启动剪贴板服务 >启动检查服务 >启动墙纸服务 >启动音频服务 >启动HeadsetObserver >启动AdbSettingsObserver >呈现到用户眼前

分析

现在,启动就已经全部完成,与此同时服务已启动并运行,这时,你可能需要了解创建日志的一些方法。

使用adb logca从启动过程获取日志,你可以按照相应顺序输入以下命令:

adb logcat –d –b events | grep “boot”
adb logcat –d | grep preload“`

x86架构学习之中断 外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。 阅读详情

相关推荐

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 449

Android系统启动流程

android启动流程

wangadping的博客 5402

信号完整性仿真SI之Cadence Sigrity SPEED2000_眼图仿真(四)

今天给大家分享一个仿真的操作流程,是关于Cadence Sigrity SPEED2000的时域波形仿真和眼图仿真。我们会经常看见硬件工程师调试示波器上的一些信号的波形变化,其实这些也可以通过仿真电路的搭建来做出投板前的仿真,来优化走线,以减少版本的迭代次数。如果要和实际的信号保持一致,就要求仿真设置的参数和实际的参数保持一致,这也是仿真的重点和难点。下面先让我们了解一下Cadence Sigrity SPEED2000时域仿真的操作流程: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的

刘小同学的博客 1万+

安卓开机启动流程

安卓开机启动流程

似霰的博客 4880

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

matlab tolx,Nelder-Mead算法matlab

Nelder-Mead算法适合变量数不是很多的方程求极值.原理:Nelder-Mead法是利用多面体来逐步逼近最佳点x*.设函数变量为n维,则在n维空间里多面体有(n+1)个顶点.设x1,x2,...,xn+1为多面体的顶点,且满足:f(x1)<=f(x2)<=...<=f(xn+1)Nelder-Mead法试着将多面体中最差的顶点xn+1(也就是函数的最大点)以新的最佳点替代,...

weixin_36485298的博客 1480

Android---系统启动流程

1. init 根据 init.rc 运行 app_process,并携带“-zygote" 和"-startSystemServer"参数。2. AndroidRuntime.cpp::start() 里将启动 JavaVM,并且注册所有 framework 相关的系统 JNI 接口3. 第一次进入 Java 世界,运行 ZygoteInit.java::main() 函数初始化 Zygote,并创建 Socket 的 Server 端。

qq_44950283的博客 3294

【异常】OpenAI提示内容有误 Invalid prompt: your prompt was flagged as potentially violating our usage policy.

用户需优先调整提示内容,确保符合OpenAI的使用政策。若问题持续,建议结合请求ID和具体代码示例联系官方支持。同时,可参考腾讯云、Microsoft Q&A等平台提供的错误处理实践(如重试机制、日志记录)优化代码健壮性。

奶爸的编程之路,也就一周冷个三天 2079

【安卓系统笔记】基于android7.1分析android启动过程

开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机。 1.引导启动bootloader 开机按组合键可进入相应的模式,fastboot/recovery模式 按开机则正常启动流程。 Bootloader做的事情主要有:初始化CPU时钟,内存,串口等;设置linux启动参数;加载Linux各种各样的内核镜像到SDRAM中。 2.linux内...

Paul的博客 817

11、iOS设备逻辑数据分析全解析

本文深入解析iOS设备中的逻辑数据,涵盖图像相关数据库(Photos.sqlite和PhotosAux.sqlite)、录音文件、iPhoto照片存储结构、多媒体文件、第三方应用程序、社交网络应用(如Twitter、Skype、Facebook等)以及苹果相关应用(如Google Mobile、Bing)的数据存储结构和取证方法。此外,还介绍了文档类应用(如Pages、Numbers、Documents To Go)的文件存储结构及恢复方法。适用于iOS取证、数据挖掘和数字调查领域。

rain6的博客 226

37、OpenMP:并行编程的强大工具

本文详细介绍了 OpenMP 的核心功能和使用方法,包括执行环境例程、线程同步与协调机制,如关键区域、屏障、原子操作、归约子句、刷新构造和锁机制。此外,还提供了多个实践练习,涵盖矩阵乘法的并行实现、任务池与流水线模式的应用、读写锁的扩展与移植,以及客户端-服务器模式的实现与优化。通过这些内容,读者可以全面掌握 OpenMP 在并行编程中的实际应用与性能优化技巧。

www00的博客 105

【Android】系统启动流程分析 —— Zygote 进程启动过程

本文基于 Android 14.0.0_r2 的系统启动流程分析。

Creativity + Efficiency = Success 4653

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4013

android 启动过程分析

关于android启动分析的文章 是拜读柯元旦老师的android内核剖析 与 邓凡平老师的深入理解android 自己读源码按图索骥的成果。 在这里感谢 两位老师的不辞辛劳把知识奉献出来与大家分享! android是基于linux的所以dalvik虚拟启动必须通过服务或是通过某个程序来启动 android的dalvik虚拟机是通过cpp程序来启动 程序名为:/framwo

liulipuo的专栏 727

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android系统的启动过程以及APP的启动过程分析

当我们们按下手机的开机按钮,眼睛看到的是绚丽的启动画面,然后是等待着一个我们可以点击的桌面出现。外行看热闹,内行看门道,我们是内行,从开机到显示桌面发生了什么?当点击桌面上的一个图标启动某个app,这里又发生了什么?本文将会按照如下安排来分析Android系统的启动过程以及APP的启动过程。同样,本文并不打算通过分析浩如烟海的源码,那样只会徒增篇幅,而对于Android应用开发工程师而言理解了本文...

藏六七 716

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android Activity 的详细启动过程分析

本文包含 App 的启动流程、新进程的启动流程分析,每一章节都配了一个比较完善的流程图来帮助读者理解。其实启动一个 App 和启动普通 Activity 一样,如果发现这个 Activity 的进程未启动的话,会启动对应的进程,然后由新的进程来启动这个 Activity,当然这可以单独写一篇文章来分析。但是本文为了降低耦合性让读者更加容易理解 Activity 的启动过程,直接从如何启动一个 Activity 开始讲起。

布莱克‌ 6694

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android Activity启动过程分析

当我们在一个Activity中(或通过Context对象),调用startActivity()方法来启动另一个Activity的工程中发发生了什么呢?这就是本文想跟大家分享的内容,我们一起通过源码的方式来看下Activity的启动过程(本文是基于Android Q源码)。  启动Activity的流程大体分为两步:找到要启动的Activity;然后启动它。(虽说有点像如何把大象装进冰箱,但也确实是那么回事,只不过每个步骤有更多细节) 找到Activity  要想启动一个Activity,系统先要找到这个.

sd_zhuzhipeng的专栏 3509

Android系统启动过程分析

Android系统启动过程分析 一、Android平台架构 首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。 可以看出整个架构由5部分构成,从下到上分别为: 1. Linux内核层 Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和...

songfei_dream的专栏 1672

Android 启动过程分析

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能   本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、Android 启动过程分析 二、Android启动分析 三、init 进程启动分析 四、init 启动脚本分析 五、init 进程分析 六、init 脚本执行 七...

程序员Android 404

Android启动过程分析

一、大纲 步骤二的BootLoader是芯片内部固化的 二、init进程分析 1、简介 init进程是系统启动的第一个进程 2、init.c源码分析 init.c位于:system/core/init/init.c 创建并挂载目录 将log重定向到/proc/kmsg kmsg是内核的log输出目录,重定向的实现逻辑如下: 创建节点并打开,节点的名称为klog_fd,这是个全局变量,klog_write中调用,调用klog_write哈数就会将log记录...

wwwlyj123321的博客 2366

【Android】启动过程分析

【Android】启动过程分析1 Android启动过程2 Android启动过程分析主要内容3 Android启动模式3.1 recovery升级模式3.2 正常启动模式3.3 uboot检查启动模式的过程4 Android init进程 1 Android启动过程 在分析具体细节之前,我们先来看看Android系统的启动过程: 图1 Android启动过程 2 Android启动过程分析主要内容 图2 Android启动分析的主要内容 3 Android启动模式 3.1 recovery升级模式 启

慕容陌尘的博客 323

Android的APP启动过程分析

Android应用程序,以ActivityThread.main()做为主入口 下图展示了Application以及Activity的创建过程 1、创建Application 每个应用程序在第一次启动时,都会先创建一个Application对象。Application对象,是通过ActivityThread的handleBindApplication()创建的 pr...

mtkfeng的博客 291

Android zygote 进程的启动过程分析

zygote进程在 Android 开发中属于比较底层的内容,然而要透彻的理解 AMS、WMS 和 IPC 等,不可避免的要先理解zogyte进程,因此本文即作为对自己的学习记录,也想分享出来和遇到同样问题的读者交流。

布莱克‌ 5930

Android系统进程Zygote启动过程的源代码分析

在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育(fork)出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因吧。由于Zygote进程在Android系统中有着如此重要的地位,本文将详细分析它的启动过程。        在前面一篇文章Android应用程序进程启动过程的源代码分析中,我们看到了,当ActivityManager

老罗的Android之旅 12万+
上一篇: ContentProvider
下一篇: JVM和Dalvik VM
技术搬运工
博客等级 码龄11年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值