Android系统的启动流程
手机启动后首先会通过执行BootLoader来启动Linux内核,BootLoader是所有嵌入式设备开机启动执行的第一行代码,linux内核在启动过程中会加载各种设备的驱动同时初始化数据结构,并且开启第一个用户级的init进程,init.c执行main方法创建一些类的系统文件夹,解析一个init.rc的配置文件,执行一系列的linux命令 这其中就包含了启动zygote进程的命令。zygote进程是所有Android进程的父进程,一些比较重要的系统进程也是由zygote进程fork出来的。启动zygote进程首先在c/c++环境中启动java虚拟机,然后通过jni调用zygoteInit.java开启java环境 zygote进程启动的过程中会创建一个socket服务端用来接收启动新应用的消息,一旦接收到消息就会fork出一个进程给新的应用,这样的话新的进程也就有了一个jvm,同时也会预加载一些资源,包括Android系统api的字节码文件以及系统自带的图片和颜色,这样创建出来的新进程就跟zygote进程有相同的资源,同时启动systemService进程开启死循环等待fork的消息。SystemServer是zygotefork出来的第一个java进程,systemServer在启动过程中会加载各种服务并且通过ServiceManager进行管理,在所有的service创建完毕之后判断当前的activity任务栈中是否有activity的实例,如果没有就启动桌面。
。
Android系统的启动流程的更多相关文章
- Android系统开机启动流程及init进程浅析
		
Android系统启动概述 Android系统开机流程基于Linux系统,总体可分为三个阶段: Boot Loader引导程序启动Linux内核启动Android系统启动,Launcher/app启动 ...
 - 关于Android系统的启动流程
		
当按下Android设备电源键时究竟发生了什么?Android的启动过程是怎么样的?什么是Linux内核?桌面系统linux内核与Android系统linux内核有什么区别?什么是引导装载程序?什么是 ...
 - Android process 的启动流程
		
Android process 的启动流程 1.android启动时所运行的进程: USER PID PPID VSIZE RSS WCHAN PC ...
 - Android核心服务解析篇(三)——Android系统的启动
		
从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
 - Android的开机启动流程
		
1.Android的开机启动流程 Android的层次框架图,如下所示: 图片清晰地展示了Android的五层架构,从上到下依次是:应用层.应用框架层.库层.运行时层以及Linux内核层.Androi ...
 - Cocos2d-x3.3RC0的Android编译Activity启动流程分析
		
本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...
 - Android开机动画启动流程
		
android开机动画启动流程 从android的Surface Flinger服务启动分析知道,开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的. 下面我 ...
 - Linux系统的启动流程
		
Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...
 - linux系统的启动流程梳理
		
1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...
 
随机推荐
- HDU 2795 Billboard(宣传栏贴公告,线段树应用)
			
HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意: 要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...
 - 在VC6.0中多线程编程演示样例(带同步信号量)
			
直接上代码: #include <windows.h>//必要的头文件,使用Windows API函数 #include <stdio.h> int index = 0; in ...
 - android动画具体解释四 创建动画
			
使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator ...
 - javaweb项目数据库中数据乱码
			
javaweb项目数据库中数据乱码 first: 排查原因: 打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 前者解决方案: 在web.xml里面加上: <fi ...
 - 7-39 Math对象
			
7-39 Math对象 学习要点 掌握常用的数学计算方法 温馨提示:关于学习方法的建议 不要强求自己讲参考手册上所以的属性和方法都搞清楚,原因如下: 有些属性和方法非常生僻,很少用,甚至经过一段时间后 ...
 - sphinx是支持结果聚类的
			
Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta Sphinx--强大的开源全文检索引擎,Coreseek--免费开源的中文全文检索引擎 版权 © 2001-2011 And ...
 - iphone设备尺寸规格
			
1.以下是iphone各种设备的尺寸规格 2.开发时只需要按“逻辑分辨率”来,1x,2x,3x主要用于切图时按不同大小来切图,如1x的图就是按照“逻辑分辨率”大小的效果图切出来的原图,2x就是1x原图 ...
 - 配置ant编译时的jdk版本
			
如下图,选择对应的sdk版本:
 - HDU4642博弈好题
			
链接:http://acm.hdu.edu.cn/ 两个人进行翻棋游戏,若a[n][m]为1,则不管先手就可以翻a[n][m]使其为0,这样不管后手翻什么都会使得a[n][m]为1,先手总是有棋可翻: ...
 - gunicorn部署Flask服务
			
作为一个Python选手,工作中需要的一些服务接口一般会用Flask来开发. Flask非常容易上手,它自带的app.run(host="0.0.0.0", port=7001)用 ...