您的位置:首页 > 运维架构 > 网站架构

Android系统架构及启动流程初探

2017-01-20 10:39 507 查看

Android系统架构

Android 自上而下可以简单分为:Application应用层Android Framework应用框架层系统运行库层(包括Android运行时库)以及Linux内核层



Application应用层:手机上所有的应用程序都属于这个层,我们平时Android应用开发也是在这个层,使用的开发语言是Java

Android Framework应用框架层:这一层主要提供了开发应用程序时需要用到的一系列API,我们开发App时就会用到这里提供的API,这一层的开发语言也是Java

系统运行库层:这一层主要是一些C/C++库,为Android提供了主要的系统特性。Android运行时库主要包含一些核心库以及 Dalvik虚拟机。

Linux内核层: Android是基于Linux内核的,这一层为Android的硬件设备提供底层驱动,如音频、蓝牙、电源管理等。

Android系统的启动流程



首先是Linux内核的加载和启动

设备上电(也就是打开手机电源)

片上ROM的启动引导代码找到Bootloader代码开始执行

Bootloader负责硬件的初始化并加载Linux内核

Linux内核开始启动,初始化各种软硬件环境,加载驱动程序,挂载根文件系统

Linux内核执行init程序,开启Android的世界

不同厂商品牌的手机启动都会有不同的图标和动画,主要就是通过修改Init程序实现。

Android的启动

Linux内核的init进程会执行app_process程序,创建Zygote进程,它是Android系统最重要的进程,所有后续的Android应用程序都是由它fork出来的。Zygote进程里创建了虚拟机实例,所以每一个应用程序进程里都有自己的虚拟机,也即每一个应用程序都运行在自己的虚拟机里。

Zygote进程启动起来以后就会启动System Server进程,System Server进程会启动一系列关键服务:包括ActivityManagerService、PackageManagerService、WindowManagerService等,也即应用框架层的服务



PackageManagerService启动过程中会解析Android系统的镜像文件,获取里面已经编译好的应用程序,如电话、短信等,也就是我们手机开机以后就看到的应用。每一个应用程序的入口Activity(即AndroidManifest.xml文件中设置“android.intent.category.LAUNCHER”的Activity)都被保存在本地。

ActivityManagerService负责启动应用程序。首先启动的应用就是系统的Home应用,也即Launcher程序。

Launcher程序启动Launcher组件,调用Launcher组件的onCreate方法(就类似于MainActivity的onCreate方法)。

在Launcher组件的onCreate方法中PackageManagerService获取所有的应用信息,Launcherd的bindAllApplications()加载所有应用。

每一个应用程序快捷图标的信息使用一个ApplicationInfo对象描述,被显示到屏幕,并且被注册了点击事件。

点击应用图标,Launcher的startActivitySafely()方法启动指定的应用程序的根Activity组件。

至此,Android系统就启动完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息