“Android系统框架”-Androi的面试必问部分
安卓系统框架层的详解:
首先我们先看看框架结构图:
通过图片可知,从上到下分为了四层:”应用程序”层->”应用程序框架”层->”系统运行库”层->”linux核心”层
各层次的作用介绍:
1.”应用程序”层:
可以理解成"直接和用户接触"的层:
就是已经做好的程序,你们用的QQ,微信就是了,还有系统自带的比如:电话,短信,联系人,日历,计算器等等就是这层
2.”应用程序框架”层
可以理解成"开发人员"开发QQ,微信等所在的层:
使用的API框架,大大简化和方便开发人员的开发
1.视图系统(View System):
丰富且可拓展,包括:列表(lists),网络(grids),文本框(text boxes),按钮(buttons)等等.
2.内容提供器(Content Providers):
可以让一个应用访问"另一个应用"的数据(比如联系人数据库),或者共享他们的数据
3.通知管理器(Notification Manager):
可以在"状态栏中"显示自定义的提示信息
4.活动管理器(Activity Manager):
管理和应用生命周期并提供常用的"导航退回"功能
5.窗口管理器(Window Manager):
管理所有的窗口程序
6.包管理器(Package Manger):
对Android系统内的程序管理
在安卓 SDK中内置了一些对象,最重要的就是Activity,Intent,Service,ContentProvider,BroadCastReciver
Activity活动
一个活动就是一个界面,一个应用可以定义多个活动,每个活动都能保存和恢复自身的状态.
Intent意图
贯穿各个组件的工具,也是描述特定活动的机制,如:选照片,打电话等具体动作;
安卓中所有动作都是通过Intent完成,所以开发者可以替代或者重用大量组件.如发送邮件的intent,我们的应用想发送邮件那么激活这个intent即可.或者我们自己写一个邮件的应用,注册为活动后就处理intent代替远原有的标准的邮件程序.
Service服务
服务就是在后台运行的,看不到界面的任务,比如音乐播放器,你关闭界面后仍然播放,这就是服务机制
ContentProvider内容提供者
程序提供自定义对数据进行增删改查的方案,是不同程序共享数据的最佳方式,如谷歌提供的联系人的内容提供者和:姓名,地址,电话等在内的可悲所有程序使用
3.系统运行库层
我们开发使用应用程序框架层的时候,android系统会通过C/C++库来方便对我们对各个组件的使用,便于开发
Bionic系统 C 库:
C语言标准库,**系统最底层"库"**,C库通过Linux系统调用
多媒体库(MediaFrameword):
android系统多媒体库,基于PacketVideo openCORE,该库支持多种常用的音频,视频格式的回放和录制以及图片 如:MPG4,MP3,AAC,AMR,JPG,PNG等
SGL:
2D图形引擎
SSL:
位于TVP/IP协议和各种应用层协议之间,为数据提供支持
OpenGL ES:
3D图形引擎
SQLite:
关系数据库引擎
Webkit:
浏览器引擎
FreeType:
位图(Bitmap)即矢量(Vector)
Java虚拟机(JVM)和Dalvik虚拟机(DVM)对比
很多人认为Dalvik虚拟机就是Java虚拟机,这个说法是不正确的,因为:
1.Dalvik**不是按照JVM的规范来实现,两者不兼容**
2.JVM运行的是.class字节码文件,DVM运行的是.dex文件(Dalvik Executable)
3.安卓也是JAVA语言,那么java文件变成.class后,通过dex工具把.class变成.dex文件,然后DVM就可以运行这个文件了.
Dalvik虚拟机非常合适于移动端使用,对比做系统和服务器系统运行的虚拟机,不需要很快的CPU和大内存空间.
DVM虚拟机特征:
1.专有的dex文件格式
.dex是安卓专用文件格式,那为什么会启用.class的直接运行而采用新格式?
- 1.一个应用很多个类,编译后有很多的.class文件,class文件中有不少冗余信息,dex文件格式会把所有的.class文件整合到一个文件,从而减少了文件尺寸和I/O操作,也提高了类的查找速度.
- 2.增加操作码的支持
- 3.文件结构尽量简洁,使用等长指令,提高解析速度.
- 4.尽量扩大只读结构大小,借以跨进程的数据共享
2.dex的优化
- .dex文件的结构紧凑,仍需优化,比如验证dex文件中的所有类,对特定类进行优化,对方法里的操作码的优化.
3.基于寄存器
- 对比基于堆栈的java虚拟机,dvm基于寄存器,虽然在硬件,通用性上更差点,但在代码执行效率上效率更高
- 一个应用,对应一个寄存器,放置在一个单独的存储空间
3.linux核心驱动层
linux核心层作为安卓硬件和软件的抽象层
安卓的核心服务是基于linux内核的,比如安全性,内存管理,进程管理,网络协议和驱动模型等都依赖于linux内核
安卓主要是需要与硬件打交道的驱动程序
- 显示驱动(Display Driver)
- 键盘驱动(keyBoard Driver)
- flash内存驱动(Flash Memory Driver)
- 音频驱动(Audio Driver)
- 照相机驱动(Camera Driver)
- 蓝牙驱动(Blutooth Driver)
- WIFI驱动
Binder驱动
IPC驱动,特殊的驱动,用于进程间通信
能源管理
Power Manager:如电池电量