android系统framework层启动过程

转载于:https://www.cnblogs.com/huhe/p/12625641.html

一,Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程。

整体流程如下:

  1. android是基于linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。
  2. Init进程启动zygote:
    解析配置文件:init.rc(系统配置文件)及initXXX.rc(与硬件平台相关的文件)的内容执行一系列的命令,包括创建mount目录,安装文件系统,设置属性,启动属性服务器,启动Socket服务端口 --> 加载preload-classes和preload-resources(Framework大部分类及资源)–> fork启动新的进程Zygote(其实是由fork和execv共同创建)。
  3. 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()函数以完成该对象的启动

  1. 当以上服务线程都启动后,AMS以systemReady调用完成最后启动,mMainStack.resumeTopActivityLocked(null)-》mService.startHomeActivityLocked启动第一个Activity。至此,FrameWork 的启动完成。

二,学习Framework 要知道的重点

  1. Init

  2. Zygnote

  3. ActivityManagerService

  4. PackageManagerService

  5. WindowManagerService

  6. PowerManagerService

  7. InputMethodManagerService

  8. NetworkManagementService

  9. MountService

  10. NotificationManagerService

  11. Binder

更多SystemServer见下表

服务类名称作用描述
EntropyService提供伪随机数
PowerManagerService电源管理服务
ActivityManagerService最核心的服务之一,管理Activity
TelephonyRegistry通过该服务注册电话模块的事件响应,比如重启、关闭、启动等
PackageManagerService程序包管理服务
AccountManagerService账户管理服务,是指联系人账户,而不是Linux系统的账户
ContentServiceContentProvider服务,提供跨进程数据交换
BatteryService电池管理服务
LightsService自然光强度感应传感器服务
VibratorService震动器服务
AlarmManagerService定时器管理服务,提供定时提醒服务
WindowManagerServiceFramework最核心的服务之一,负责窗口管理
BluetoothService蓝牙服务
DevicePolicyManagerService提供一些系统级别的设置及属性
StatusBarManagerService状态栏管理服务
ClipboardService系统剪切板服务
InputMethodManagerService输入法管理服务
NetStatService网络状态服务
NetworkManagementService网络管理服务
ConnectivityService网络连接管理服务
ThrottleService暂不清楚其作用
AccessibilityManagerService辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果
MountService挂载服务,可通过该服务调用Linux层面的mount程序
NotificationManagerService通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边
DeviceStorageMonitorService磁盘空间状态检测服务
LocationManagerService地理位置服务
SearchManagerService搜索管理服务
DropBoxManagerService通过该服务访问Linux层面的Dropbox程序
WallpaperManagerService墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景
AudioService音频管理服务
BackupManagerService系统备份服务
AppWidgetServiceWidget服务
RecognitionManagerService身份识别服务
DiskStatsService磁盘统计服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值