Android启动过程分析

Android系统启动(一)— init 进程启动过程 Android和Android系统服务。严格来说,Android系统实际是运行在Linux内核之上的一系列“服务进程”,而这些服务进程的“老祖宗”就是init进程。initAndroidPID1Androidinit.rcAndroidinit.rcinitmkdirmountinit.rcZygoteinitLinuxinit.rcinitAndroid 10对init进程的入口函数进行了调整,不再是之前的的main函数,**而是换成了的main。 阅读详情

(2) 解析init.rc文件:该阶段对init.rc脚本文件进行解析,主要对Service(服务)和Action(动作)进行解析。其中,Service由命令(Command) 和 一系列服务的附加内容(Option,选项)组成,如**:“service vold /system/bin/vold”为一个Service**,而“socket vold stream 0660 root mount“则为配合该服务使用的Option;**Action则由 一系列的命令 组成,**如:“on init mkdir /system”为系统初始化时建立系统文件夹的Action;

(3) 触发需要执行的action:Action需要在Triggers(触发条件)中调用,本阶段对需要执行的Action进行触发,并根据触发条件将需要执行的Action放入Action队列;

(4) 执行在action队列中的命令:对上一阶段触发的Action以及Service进行执行。并在此过程中,派生了Zygote和Service Manager两个非常重要的进程;

(5) 循环处理事件:init进程进入无限循环,处理设备插入/拔出,服务属性状态变化和signal事件等。

2. 源码分析结果

对android-2.3.3_r1版本中的如下源码文件进行分析:

(1) init.c:路径为system/core/init/init.c

(2) init_parser.c:路径为system/core/init/ init_parser.c

(3) builtins.c:路径为system/core/init/ builtins.c

(4) property_service.c:路径为system/core/init/property_service.c

(5) keycords.c:路径为system/core/init/keycords.c

(6) signal_handler.c:路径为system/core/init/signal_handler.c

总结得出系统启动流程对应的源代码文件及函数如下(注:以下函数间的顺序执行关系使用“>”表示;函数间的调用执行关系使用“à”表示)

2.1 第一阶段(启动准备)

具体的函数执行过程如下:

 mkdi **《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】** r > mount > open_devnull_stdio > log_init

2.2 第二阶段(解析init.rc文件)

具体的函数调用过程如下:

 init_parse_config_fileàparse_configà parse_new_sectionàparse_service (或者parse_action)-> parse_line_service(或者parce_line_action)

2.3 第三阶段(触发需要执行的action)

具体的调用过程如下:

 action_for_each_trigger("boot", action_add_queue_tail);à action_add_queue_tail ( class_start default) à action_remove_queue_head à do_class_start

2.4 第四阶段(执行在action队列中的命令)

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

相关推荐

计算机组成原理(二)—— 数据的表示与运算

本章目录引言一、数制与编码1.1 进位计数制1.1.1 进制及转换1.1.2 真值、机器数1.2 BCD码1.3 ASCII 码1.4 校验码1.4.1 奇偶校验码1.4.2 海明码1.4.3 CRC循环冗余码二、定点数的表示和运算2.1 定点数的表示2.1.1 无符号2.1.2 有符号(原码、反码、补码、移码)2.2 定点数的运算2.2.1 移位运算2.2.2 加减运算(溢出判断)2.2.3 乘法运算2.2.4 除法运算2.3 强制类型转换2.4 数据的存储和排列三、浮点数的表示和运算3.1 浮点数的表示

S mile0804的博客 7473

Android系统启动过程分析

1. 系统启动流程简介 在linux里,每一个进程将有4G的空间,内核将这4G字节的空间分为两部分。最高的1G字节供内核使用,称为“内核空间”。而较低的3G字节供各个进程使用,称为“用户空间”。 在Linux内核启动后,init 1 (1号进程)将作为第一个用户空间 的进程来启动Android系统,该启动流程可以分为如下5个阶段,如下图: (1) 启动准备:该阶段包括

快乐&&平凡 3990

STM32CubeMX安装避坑指南:为什么你的Java环境总是报错?

本文针对STM32CubeMX安装过程中最常见的Java环境报错问题,提供了一套完整的诊断与解决方案。文章深入剖析了JRE版本冲突、环境变量配置错误、路径权限等核心原因,并给出了从系统级检查到手动修正环境变量的详细步骤,帮助开发者彻底解决安装难题,顺利开启STM32开发之旅。

prometheus9mon的博客 226

深入理解init_4``````````init控制service(基于Android2.2,代码源自Google)

深入理解init_4············`init控制service

Venus 的博客 991

Python语言在工业控制中的简单应用

在工业控制中,经常需要对采集到的数据进行分析和处理,Python的这些库可以简化这一过程。传统的工业控制系统多依赖于专用的控制硬件和软件,但随着技术的发展,开放性和灵活性成为了新的需求焦点。还有,Python社区活跃,提供了大量的开源代码和模块,这对于工业控制领域来说是一个巨大的资产。Python作为一种高级编程语言,因其简洁的语法、强大的库支持和广泛的社区资源而在工业界获得了快速的发展和广泛的应用。在工业控制领域,Python的应用日益增多,这得益于其跨平台性、脚本语言的灵活性以及与硬件设备交互的能力。

2303_78014702的博客 1720

从芯片原厂到BSP工程师:技术转型与核心能力解析

嵌入式系统开发中,BSP(板级支持包)作为连接硬件与操作系统的关键层,其开发能力直接影响设备稳定性与性能。理解Linux内核架构(如内存管理、进程调度)和基础接口协议(I2C/SPI/USB)是BSP工程师的核心技能。在芯片验证与驱动开发场景中,多核异构系统调试与稳定性问题排查(如死机分析)展现了工程师的实战能力。随着物联网与智能设备发展,掌握从硬件适配到系统优化的全链路技术栈,成为职业发展的关键突破点。

weixin_36012152的博客 599

Android系统设置属性详解

(一)Android上有三种主要途径来get/set属性。 (1)native code 当编写本地应用程序时,可以使用property_get和property_set 这两个API来读取/设置属性。要使用它们,我们需要include cutils/properties.h,并链接libcutils库。 //frameworks/native/services/surfaceflinger/StartPropertySetThread.cpp #include <cutils/properties

Flying snow 3802

f2fs学习笔记 - 3. F2FS文件系统布局

目录1.前言2.F2FS布局说明2.1. super block(block 0x0 ~ block 0x1ff)2.2 CP(block 0x200 ~ block 0x5ff)cp page1nat journalsit journaldata summarycurrent hot node summarycurrent warm node summarycurrent cold node summarycp page22nd checkpoint2.3 SIT(block 0x600 ~ block

HZero 4645

Android系统启动流程

init进程是Android系统中用户空间的第一个进程(pid=1),它是用户进程的鼻祖,负责孵化各种属性服务、守护进程也包括非常重要的Zygote。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析Init进程。二。

Dream It Possible 5958

超临界二氧化碳发电技术深度解析

超临界二氧化碳发电技术正在突破传统热电转换的物理边界。作为新一代发

硬核科技 601

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 757

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

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

Paul的博客 817

Swin Transformer注意力计算复杂度为何比全局注意力少那么多?

本文对比分析了Vision Transformer(ViT)和Swin Transformer的计算复杂度。ViT采用全局注意力机制,计算复杂度为4[hwc^2]+2[(hw)^2C],当图像尺寸较大时计算量显著增加。而Swin Transformer采用窗口注意力机制,将图像划分为M×M的窗口(如7×7),计算复杂度降为4[hwc^2]+2[(hw)(M*M)*C]。以224×224图像为例,Swin Transformer的计算量比ViT减少约900倍,大幅节省了计算资源。文章通过矩阵乘法运算详细推导了

人工智能研究所的博客 62

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

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

Creativity + Efficiency = Success 4653

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 启动过程分析

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

liulipuo的专栏 727

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

藏六七 716

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android Activity 的详细启动过程分析

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

布莱克‌ 6693

Android Activity启动过程分析

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

sd_zhuzhipeng的专栏 3509

Android 启动过程分析

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

程序员Android 404

【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万+
上一篇: Android从零撸美团(一) - 统一管理 Gradle 依赖 提取到单独文件中
下一篇: Android基础知识点(持续更新中)
Android_1314
博客等级 码龄5年 1粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值