您的位置:首页 > 职场人生

"Android系统框架"-Androi的面试必问部分

2016-06-29 14:03 162 查看
“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:如电池电量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android系统框 面试