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

“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:如电池电量
    
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值