Android系统启动流程和App启动流程

一、Android系统架构

Android系统架构

andorid系统架构从上到下分别有应用层、应用框架层、系统运行时库层、硬件抽象层、Linux内核层。

  • 应用层:包括系统应用比如闹钟、日历等这些在内的以及非系统级别的应用都属于应用层。负责用户交互,也就是我们需要开发的东西。

  • 应用框架层:这一层主要是为咱们开发人员提供用来开发应用程序的API,平常我们开发程序大部分都是调用这部分的API来进行开发。这一层主要提供一些ActivityManager 管理应用生命周期、locationManager 地理位置服务、还有就是NotificationManager 消息通知管理等等

  • 系统运行库层:这一层主要分为两部分,分别是c/c++程序库和Android运行库

    c++库:主要是能被Andorid系统不同组件所使用,并通过应用程序框架为开发者提供服务。它主要功能有openggl 绘图方法库,多媒体库支持常用的音频 视频格式录制回访 ,还有我们常用会用到的一个轻量级的数据库 sqlLite 等还有ssl网络协议等等

    android运行时库:它主要又分为核心库和虚拟机ART,核心库主要包含Java核心库的大部分功能。android 5.0系统之前使用的虚拟机是 dalvik,它相对于JVM来说,dalvik虚拟机是专门为移动设备定制的,主要在有限的内存中同时运行多个虚拟机实例,每一个dalvik虚拟机就是一个独立的linux进程,这样独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 5.0之后,dalvik虚拟机被ART所取代,它们主要区别就是dalvik虚拟机,应用每次在运行的时候,都需要把字节码文件转换为机器码来运行,这样应用的运行效率就会比较低。 而art虚拟机,应用在第一次安装的时候,字节码文件就会预先编译成机器码,让应用成为真正的本地应用。

  • 硬件抽象层:它是位于操作系统内核和硬件电路之间的接口层,主要目的在于将硬件抽象化,隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多平台上进行移植。

  • linux内核层:Android的核心系统服务基于Linux内核,在此基础上添加了部分Android专用的驱动,android系统的安全管理、内存管理、进程管理、网络协议等都依赖于该内核。

二、系统的启动流程解析

系统启动简图
  • 1.启动电源以及系统启动
    加载引导程序Bootloader到RAM,然后执行。

  • 2.引导程序BootLoader启动
    引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。

  • 3.Linux内核启动
    内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置,它首先在系统文件中寻找init.rc文件,并启动init进程。

  • 4.init进程启动
    init进程是系统空间内的第一个进程,进行初始化和启动属性服务,在main方法中进行,包括初始化资源文件和启动一系列的属性服务。通过执行init.rc文件的脚本文件来启动Zygote进程。

  • 5.Zygote进程启动
    所有的应用程序包括system系统进程 都是zygote进程负责创建,因此zygote进程也被称为进程孵化器,它创建进程是通过复制自身来创建应用进程,它在启动过程中会在内部创建一个虚拟机实例,所以通过复制zygote进程而得到的应用进程和系统服务进程都可以快速地在内部的获得一个虚拟机实例拷贝。

  • 6.SystemServer进程启动
    启动Binder线程池和SystemServiceManager,systemServiceManger主要是对系统服务进行创建、启动和生命周期管理,就会启动各种系统服务。(android中最核心的服务AMS就是在SystemServer进程中启动的)

  • 7.Launcher启动
    Launcher组件是由之前启动的systemServer所启动的
    这也是andorid系统启动的最后一步,launcher是andorid系统home程序,主要是用来显示系统中已安装的应用程序。 launcher应用程序的启动会通过请求packageManagerService返回系统中已经安装的应用信息,并将这些应用信息通过封装处理成快捷列表显示在系统屏幕上,这样咱们就可以单击启动它们。
    被SystemServer进程启动的ActivityManagerService会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。

上述七步是手机开机andorid系统启动的流程。

三、应用启动流程

首先,activity分为两种分别是根activity和子activity,根activity就是显示在手机屏幕上快捷应用图标,在launcher应用程序启动器,根activity也就是app的第一个activity是由Launcher组件来启动,但它又是通过activity管理服务ActivityManagerService来启动根activity。但是activity Launcher activityManagerService分别运行在不同进程里面,这三个进程是通过binder进程间通信机制来完成进行通信完成activity的启动。应用的启动也就是根activity的启动。

ActivityManagerService 是一个系统关键服务,运行在systemService系统进程中,负责启动和调度应用程序组件。

luncher是andorid系统的home程序,管理和安装手机里的所有应用,


应用程序进程启动过程分析-时序图
  • (1)Launcher首先向activityManagerService发送一个启动activity的进程间通信请求

  • (2)ams会先把要启动的activity信息保存下来,然后再想Launcher发送一个进入中止状态的进程间通信请求。

  • (3)Launcher组件进入终止状态后,就会给ams发送一个已进入终止状态的一个进程间通信请求,ams收到后就会继续执行启动activity操作

  • (4)ams如果发现用来运行运行activity的进程不存在,它就会给zygote进程发送一个进程间通信请求,zaygote会调用fork()方法创建一个新的应用程序进程。zaygote进程在启动的时候在内部创建一个虚拟机实例,它通过复制它本身得到一个应用程序进程。

  • (5)新的应用程序进程启动完成之后,就会向ams发送一个启动完成的通信请求,

  • (6)进程创建好之后,经过一系列调用就会调用startactivity方法,最后 activity调用oncreate方法构建出页面至此我们的应用正式启动完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容