FrameWork启动流程
Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程。整体流程如下:
Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。
Init进程启动zygote:解析配置文件:init.rc(系统配置文件)及initXXX.rc(与硬件平台相关的文件)的内容执行一系列的命令,包括创建mount目录,安装文件系统,设置属性,启动属性服务器,启动Socket服务端口-》加载preload-classes和preload-resources(Framework大部分类及资源)-》fork启动新的进程Zygote(其实是由fork和execv共同创建)。
Zygnote孵化第一个进程SystemServer,SystemServer启动各种系统服务线程。SystemServer进程在Android的运行环境中扮演了"神经中枢"的作用,APK应用中能够直接交互的大部分系统服务都在该进程中运行,常见的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、PackageManagerServer(PmS)等,这些系统服务都是以一个线程的方式存在于SystemServer进程中。SystemServer的main()函数首先调用的是init1()函数,这是一个native函数,内部会进行一些与Dalvik虚拟机相关的初始化工作。该函数执行完毕后,其内部会调用Java端的init2()函数,该函数首先创建了一个ServerThread对象,该对象是一个线程,然后直接运行该线程,于是,从ServerThread的run()方法内部开始真正启动各种服务线程。
基本上每个服务都有对应的Java类,从编码规范的角度来看,启动这些服务的模式可归类为三种:模式一是指直接使用构造函数构造一个服务,由于大多数服务都对应一个线程,因此,在构造函数内部就会创建一个线程并自动运行。模式二是指服务类会提供一个getInstance()方法,通过该方法获取该服务对象,这样的好处是保证系统中仅包含一个该服务对象。模式三是指从服务类的main()函数中开始执行。无论以上何种模式,当创建了服务对象后,有时可能还需要调用该服务类的init()或者systemReady()函数以完成该对象的启动
当以上服务线程都启动后,AMS以systemReady调用完成最后启动,mMainStack.resumeTopActivityLocked(null)-》mService.startHomeActivityLocked启动第一个Activity。至此,FrameWorkd启动完成。
SystemServer中启动服务列表
|
服务类名称 |
作用描述 |
启动模式 |
|
EntropyService |
提供伪随机数 |
1.0 |
|
PowerManagerService |
电源管理服务 |
1.2/3 |
|
ActivityManagerService |
最核心的服务之一,管理Activity |
自定义 |
|
TelephonyRegistry |
通过该服务注册电话模块的事件响应,比如重启、关闭、启动等 |
1.0 |
|
PackageManagerService |
程序包管理服务 |
3.3 |
|
AccountManagerService |
账户管理服务,是指联系人账户,而不是Linux系统的账户 |
1.0 |
|
ContentService |
ContentProvider服务,提供跨进程数据交换 |
3.0 |
|
BatteryService |
电池管理服务 |
1.0 |
|
LightsService |
自然光强度感应传感器服务 |
1.0 |
|
VibratorService |
震动器服务 |
1.0 |
|
AlarmManagerService |
定时器管理服务,提供定时提醒服务 |
1.0 |
|
WindowManagerService |
Framework最核心的服务之一,负责窗口管理 |
3.3 |
|
BluetoothService |
蓝牙服务 |
1.0+ |
|
DevicePolicyManagerService |
提供一些系统级别的设置及属性 |
1.3 |
|
StatusBarManagerService |
状态栏管理服务 |
1.3 |
|
ClipboardService |
系统剪切板服务 |
1.0 |
|
InputMethodManagerService |
输入法管理服务 |
1.0 |
|
NetStatService |
网络状态服务 |
1.0 |
|
NetworkManagementService |
网络管理服务 |
NMS.create() |
|
ConnectivityService |
网络连接管理服务 |
2.3 |
|
ThrottleService |
暂不清楚其作用 |
1.3 |
|
AccessibilityManagerService |
辅助管理程序截获所有的用户输入,并根据这 些输入给用户一些额外的反馈,起到辅助的效果 |
1.0 |
|
MountService |
挂载服务,可通过该服务调用Linux层面的mount程序 |
1.0 |
|
NotificationManagerService |
通知栏管理服务,Android中的通知栏和状 态栏在一起,只是界面上前者在左边,后者在右边 |
1.3 |
|
DeviceStorageMonitorService |
磁盘空间状态检测服务 |
1.0 |
|
LocationManagerService |
地理位置服务 |
1.3 |
|
SearchManagerService |
搜索管理服务 |
1.0 |
|
DropBoxManagerService |
通过该服务访问Linux层面的Dropbox程序 |
1.0 |
|
WallpaperManagerService |
墙纸管理服务,墙纸不等同于桌面背景, 在View系统内部,墙纸可以作为任何窗口的背景 |
1.3 |
|
AudioService |
音频管理服务 |
1.0 |
|
BackupManagerService |
系统备份服务 |
1.0 |
|
AppWidgetService |
Widget服务 |
1.3 |
|
RecognitionManagerService |
身份识别服务 |
1.3 |
|
DiskStatsService |
磁盘统计服务 |
1.0 |
FrameWork启动流程的更多相关文章
- Phalcon Framework的MVC结构及启动流程分析
目前的项目中选择了Phalcon Framework作为未来一段时间的核心框架.技术选型的原因会单开一篇Blog另说,本次优先对Phalcon的MVC架构与启动流程进行分析说明,如有遗漏还望指出. P ...
- Phalcon Framework的Mvc结构及启动流程(部分源码分析)
创建项目 Phalcon环境配置安装后,可以通过命令行生成一个标准的Phalcon多模块应用 phalcon project eva --type modules入口文件为public/index.p ...
- Android进阶系列之源码分析Activity的启动流程
美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...
- u-boot启动流程分析(2)_板级(board)部分
转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...
- 老李推荐:第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览
老李推荐:第5章2节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动流程概览 每个应用都会有一个入口方法来供操作系统调用执行,Monkey这个应用的入口方法就 ...
- 海思uboot启动流程详细分析(三)【转】
1. 前言 书接上文(u-boot启动流程分析(二)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的. ...
- Android N 的开机启动流程概述
原地址:https://blog.csdn.net/h655370/article/details/77727554 图片展示了Android的五层架构,从上到下依次是:应用层,应用框架层,库层,运行 ...
- Phalcon的Mvc结构及启动流程(部分源码分析)
Phalcon本身有支持创建多种形式的Web应用项目以应对不同场景,包括迷你应用.单模块标准应用.以及较复杂的多模块应用 创建项目 Phalcon环境配置安装后,可以通过命令行生成一个标准的Phalc ...
- Android解析ActivityManagerService(一)AMS启动流程和AMS家族
前言 此前在Android系统启动流程.应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里 ...
随机推荐
- 第一篇TC界面设计
TC界面设计方法 第一:确定自己最终界面的大小. 第二:根据功能需要,选择相应的控价. 第三:美化界面,对界面的控件调整布局位置,设置字体颜色设置背景图片等等 脚本代码: function 按钮1_点 ...
- leetcode 106 Construct Binary Tree from Inorder and Postorder Traversal----- java
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- POJ1459 Power Network(网络最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total S ...
- poj3687 拓扑序
题意:有编号 1-n 的球,每个球的质量不同,质量从 1 到 n 不等,给出一系列比较,分别是两个编号的球的大小关系,求一个序列满足上述关系,并且从编号 1 开始依次选择可选的最小质量,输出每个球的质 ...
- HTML 5 参考手册
HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML (标准通用标记语言下的一个应用)标准版本:现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML ...
- printf 格式化输出符号详细说明(转)
%a 浮点数.十六进制数字和p-记数法(C99)%A 浮点数.十六进制数字和p-记法(C99)%c 一个字符(char) %C 一个ISO宽字符 %d 有符 ...
- Understanding virtualxid && transactionid
对pg_locks视图中的virtualxid和transactionid字段感到困惑,经查阅资料,特此在此整理一下学习内容: pg_locks Columns Name Type Reference ...
- PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰
有朋友下载了PHP5.3,PHP5.4版本想加载mysql支持的时候发现没有libmysql.dll文件,无法完成mysql配置,其实PHP5.3版本开始,使用mysqlnd库,不再使用libmysq ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- Redis持久化机制和恢复机制
Redis持久化方式有两种: (1)RDB 对内存中数据库状态进行快照 (2)AOF 把每条写命令都写入文件,类似mysql的binlog日志 RDB 将Redis在内存中的数据库状态保存到磁盘里面, ...