安卓系统框架和Framework概述


一、安卓系统框架

图为 Google 官方提供的经典分层架构图,从下往上依次分为 Linux 内核、HAL(硬件抽象层)、 系统 Native 库和 Android 运行时环境、 Java 框架层以及应用层这 5 层架构,其中每一层都包含大量的子模块或子系统。
在这里插入图片描述

1.1 应用层

Android 装配了核心应用程序集合,包括拨号、邮件、日历及相机等,所有的程序均为 Java 编程语言编写的, 用户开发的应用程序与核心应用程序均属于该层,基于 Android 的系统 API 构建。
系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。

1.2 应用框架层(Java Framework)

应用框架层为开发人员提供了可以开发应用程序所需要的API,平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要的组件。
包含视图系统、内容管理器与内容、资源、通知、活动等管理器等等。

名称功能描述
Activity Manager(活动管理器)管理各个应用程序生命周期以及通常的导航回退功能
Location Manager(位置管理器)提供地理位置以及定位功能服务
Package Manager(包管理器)管理所有安装在Android系统中的应用程序
Notification Manager(通知管理器)使得应用程序可以在状态栏中显示自定义的提示信息
Resource Manager(资源管理器)提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
Telephony Manager(电话管理器)管理所有的移动设备功能
Window Manager(窗口管理器)管理所有开启的窗口程序
Content Providers(内容提供器)使得不同应用程序之间可以共享数据
View System(视图系统)构建应用程序的基本组件

1.3 Native C/C++系统库和 Android Runtime

系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。

1.3.1 C/C++程序库

C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务,主要的C/C++程序库如下表所示。

名称功能描述
OpenGL ES3D绘图函数库
Libc从BSD继承来的标准C系统函数库,专门为基于嵌入式Linux的设备定制
Media Framework多媒体库,支持多种常用的音频、视频格式录制和回放。
SQLite轻型的关系型数据库引擎
SGL底层的2D图形渲染引擎
SSL安全套接层,是为网络通信提供安全及数据完整性的一种安全协议
FreeType可移植的字体引擎,它提供统一的接口来访问多种字体格式文件

1.3.2 Android运行时库

运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,提高了全局的执行效率并减少了电量消耗,提高了内存分配能力和更准确的 Application 解析能力。

1.4 硬件抽象层(HAL)

硬件抽象层提供标准接口, HAL 包括多个库模块,每个模块为特定的硬件组件提供一组接口,比如 WIFI/BT 模块; 当框架 API 请求访问设备硬件时,Android 将加载相对应的库模块。
位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

1.5 Linux Kernel 内核层

Android 系统基于 Linux 内核,内核层为 Android 设备的各个硬件提供了相应驱动,如显示驱动、 音频驱动、 相机驱动、蓝牙/WIFI 驱动以及电源管理等。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。了解以上的知识对以后分析系统源码有很大的帮助。

在这里插入图片描述
Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native 系统库、虚拟机运行环境、框架层组成, 通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用 C++和 Java 代码编写, 通过 JNI 技术打通用户空间的 Java 层和 Native 层(C++/C),从而连通整个系统。


二、Framework

2.1 关于Framework层

Android的Framework是直接应用之下的一层,叫做应用程序框架层。这一层是核心应用程序所使用的AP!框架,为应用层提供各种API,提供各种组件和服务来支持我们的Android开发,包括ActivityManager,WindowManager,ViewSystem等。

  • 1.AcivityManagerSenvice(Ams);:负责管理所有应用程序中的Activity,它掌握所有Activity的情况,具有所有调度Activity生命周期的能力,简单来说,ActivityManagerService是管理和掌控所有的Activity.
  • 2.WindowManagerSenvice(Wms):控制窗口的显示、隐藏以及窗口的层序,简单来说,它就是管理窗口的,大多数和View有关系的都要和它打交道。
  • 3.内容提供器(Content Providers):可以让一个应用访问"另一个应用"的数据(比如联系人数据库),或者共享他们的数据
  • 4.视图系统(View System):丰富且可拓展,包括:列表(lists),网络(grids),文本框(text boxes),按钮(butons)等等
  • 5.通知管理器(Notification Manager):可以在"状态栏中"显示自定义的提示信息
  • 6.包管理器(Package Manger):对Android系统内的程序管理
  • 7.Telephony Manager 主要提供了一系列用于访问与手机通讯相关的状态和信息的方法,査询电信网络状态信息,sim卡的信息等。
  • 8.Resource Manager 提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。
  • 9.Location Manager 提供设备的地址位置的获取方式。很显然,GPS导航肯定能用到位置服务。
  • 10.XMPP 可扩展通讯和表示协议。前身为Jabber,提供即时通信服务。例如推送功能,Google Talk.

2.2 Android Framework的三大核心功能

  • 1、View.java :View工作原理,实现包括绘制view、处理触摸、按键事件等。
  • 2、ActivityManagerService.java :Ams 管理所有应用程序的Activity等
  • 3、WindowManagerService.java :Wms 为所有应用程序分配窗口,并管理这些窗口。

2.3 多语言编写的好处

Framework其实可以简单的理解为一些API的库房,android开发人员将一些基本功能实现,通过接口提供给上层调用,可以重复的调用。
可以称Framework层才真正是java语言实现的层,在这层里定义的API都是用java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表査询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个:

  • 1.用java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用,
  • 2.用Java Native lInterface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。

两种方式的结合达到了Java方法和操作系统的相互通信,Android为什么要用java编写FrameworK层呢?直接用C或C++不是更好?有关专家给出了如下解释:
C/C++过于底层,开发者要花很多的经历对C/C++的语言研究清楚,例如C/C++的内存机制,如果稍不注意,就会忘了开启或者释放。而Java的GC会自动处理这些,省去了很多的时间让开发者专注于自己的业务。所以才会从C/C++的底层慢慢向上变成了JAVA的开发语言,该层通过JNI和核心运行库层进行交互。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值