面试时总结的面试题

1.描述一下android手机操作系统的四层架构?

:应用程序层、应用程序框架层、系统运行库层以及Linux内核层。

应用程序层
        Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是用Java语言编写,并且都是可以被开发人员所开发的其他应用程序替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个性化。
用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。

应用程序框架层

        应用程序框架层是开发者从事Android应用开发的基础,很多核心应用程序也是通过这一层来实现其核心功能,该层简化了组件的重用,开发人员可以直接使用它提供的组件进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。
一下是这次层中,各个部分的功能:

        Activity Manager(活动管理器):管理各个应用程序生命周期以及通常的导航回退功能
        Window Manager(窗口管理器):管理所有的窗口程序
        Content Provider(内容提供器):通过它可以在不同应用程序之间存取或者分享数据
        View System(视图系统):构建应用程序的基本组件
        Notification Manager(通知管理器):通过它应用程序可以在状态栏中显示自定义的提示信息
        Package Manager(包管理器):Android系统内的程序管理,可以查看Android应用程序以及Activity的相关信息
        Telephony Manager(电话管理器):管理所有的移动设备功能
        Resource Manager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件,主题样式,二进制文件等
        Location Manager(位置管理器):提供位置服务
        XMPP Service(XMPP服务):提供Google Talk服务

系统运行库层:
        Android系统运行库层主要分为系统库和Android运行时环境两部分。

系统库:
        系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要包含以下几个部分:
Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。

        Media Framework:多媒体库,支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H 264、AAC、ARM。
        SQLite:轻量级的关系型数据库引擎
        OpenGL|ES:根据OpenGL ES 1.0 API标准实现的3D绘图函数库
        FreeType:提供点阵字与向量字的描绘与显示
        WebKit:开源的浏览器引擎,支持CSS,JAVASCRIPT,DOM等脚本语言
        SGL:底层的2D图形渲染引擎
        SSL:在Andorid上通信过程中实现安全认证
        Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制

Android运行时环境(Run Time Context):
        Android应用程序时采用Java语言编写,程序在Android运行时环境中执行,运行时环境可分为核心库和Dalvik虚拟机两部分。

        核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。

        Dalvik虚拟机是由Google公司自己设计专门用于Android平台的Java虚拟机,它针对移动终端做了特殊的优化。Dalvik虚拟机具有一下几个特征:

        1)专有的DEX文件格式
        一个应用中可以定义很多类,编译完成后即会有很多相应的CLASS文件,CLASS文件内会有不少冗余的信息;而DEX文件格式会把所有的CLASS文件内容整合到一个文件中。这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。原来每个类文件中的常量池,在DEX文件中由一个常量池来管理,而且DEX文件的结构非常紧凑。

        2)一个应用,一个虚拟机实例,一个进程
        每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理等等都是依赖底层操作系统实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用程序的安全和独立运行特性。
在Android系统中,Zygote 是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序时,Zygote就会孵化(FORK)出一个子进程来执行该应用程序。Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,资源库的加载,预置类库的加载和初始化等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供给系统。

        3) 基于寄存器
        Dalvik虚拟机是基于寄存器的,相对于基于堆栈的虚拟机实现,基于寄存器的虚拟机实现虽然在硬件通用性上要差一些,但是它在代码的执行效率上却更胜一筹。在基于寄存器的虚拟机里,可以更为有效的减少冗余指令的分发和减少内存的读写访问。

Linux内核层

        Google选择了Linux作为Android的底层支撑系统。当前的 Android系统是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。
当然,除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理

2.Handler的机制原理

答:andriod提供了 Handler 和 Looper 来满足线程间的通信。
  Handler 先进先出原则
  Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 
  1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 
  2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从    Message Queue取出)所送来的消息。 
  3) Message Queue(消息队列):用来存放线程放入的消息。 
  4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值