Android Framework综述

1 Android Framework介绍

        Google给了一张系统架构图,在这张图上可以看到Android的大体框架组成:Android Applications,Application Framework,Dalvik Virtual Machine&Libraries,Linux。


1.1 应用程序层
        Android应用层包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序,并且这些应用程序都是用Java语言编写的。

1.2 应用程序框架层
       应用程序框架层是Android开发的基础,很多应用程序的开发都是通过这一层的组件来进行的,常见的组件有:

a)Activity Manager(活动管理器):管理各个应用程序生命周期以及通常的导航回退功能

b)Window Manager(窗口管理器):管理所有的窗口程序

c)Content Provider(内容提供器):使得不同应用程序之间存取或者分享数据

d)View System(视图系统):构建应用程序的基本组件

e)Notification Manager(通告管理器):使得应用程序可以在状态栏中显示自定义的提示信息

f)Package Manager(包管理器):Android系统内的程序管理

g)Telephony Manager(电话管理器):管理所有的移动设备功能

h)Resource Manager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

i)Location Manager(位置管理器):提供位置服务

j)XMPP Service(XMPP服务):提供Google Talk服务


1.3 系统运行库层
       从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:
【系统库】
       系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个:

Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。

Media Framework:多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。

SQLite:小型的关系型数据库引擎

OpenGL|ES:根据OpenGL ES 1.0API标准实现的3D绘图函数库

FreeType:提供点阵字与向量字的描绘与显示

WebKit:一套网页浏览器的软件引擎

SGL:底层的2D图形渲染引擎

SSL:在Andorid上通信过程中实现握手

Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制

【Android运行时】
        Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。
核心库
       核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。
Dalvik虚拟机
       Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。

1.4 Linux内核层
       Android是基于Linux内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。


2 Android Framework分析
Android系统启动过程:Loader -> Kernel -> Native ->Java Framework -> App,如下图所示:


2.1 Loader层
       Boot Loader是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数等功能。

2.2 Kernel层
        Kernel层是指Android内核层,到这里才刚刚开始进入Android系统。启动Kernel的0号进程:初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作。

2.3 Native层
       这里的Native层主要包括init孵化来的用户空间的守护进程、HAL层以及开机动画等。启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖,会启动以下进程、服务:
(1)ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
(2)service manager、bootanim(开机动画)、Media Server等重要服务;
(3)Zygote进程,Zygote进程是Android系统的第一个Java进程,Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的。

2.4 Java Framework层
        Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
(1)Runtime;
(2)加载虚拟机;
(3)System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动整个Java framework的服务,并交给Service Manager统一管理,例如:ActivityManager,PowerManager等服务。

【PS】

       系统源码目录system/framework下主要jar包的介绍:

---- core.jar:核心库,启动桌面时首先加载这个。

---- framework.jar:android的sdk中核心代码。

---- services.jar:话机框架层服务端的编译后jar包,配合libandroid_servers.so在系统启动时通过SystemServer以循环闭合管理的方式将各个service添加到ServiceManager中。源码目录:framework/base/service

---- framework-res.apk:android系统资源库。


2.5 App层
       Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。所有的App进程都是由Zygote进程fork生成的。


3 研究内容

3.1 系统启动

(1)init进程zygoteSystemServer

(2)进程间通信:binder

(3)线程间通信:handler

(4)进程与线程

(5)Launch:apk的安装分析


3.2 Android Service

(1)ServiceManager

(2)ActivityManagerService

(3)PackageManagerService

(4)WindowManagerService


3.3 组件

(1)Activity 

(2)Service 

(3)BroadcastReceiver

(4)Provider

(5)杂:Context   Intent    ActivityThread   ViewRootImpl


3.4 UI

(1)View

(2)Activity/Window/View


3.5 子系统框架

(1)窗口管理子系统框架分析




如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值