“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系统框架-Androi的面试必问部分相关推荐

  1. 网易资深安卓架构师:2021年Android常见面试题,面试必问

    开头 让我们一起来看看,字节跳动的第三面,面试官都问了什么?(第一二面的题目及答案已整理,需要的可以在文末领取) 从七月中旬开始,我前前后后差不多一共投递了八十份简历,到目前为止,我参加面试的面试有十 ...

  2. Android面试必问框架原理

    Android面试必问框架原理 volatile的实现原理 synchronized的实现原理 join方法实现原理 CAS无锁编程的原理 ReentrantLock的实现原理 AQS的大致实现思路 ...

  3. 【Android面试】Android中高级开发面试必问,7年外包一飞冲天

    Andorid 开发在前两年也非常火热,但随着客户端开发招聘回归理性,行业已经越来越成熟,岗位招聘也就自然而然地变"卷"了.这一点,身为程序员老鸟的我深有体会. 年初,我就开始投递 ...

  4. Android面试必问之触摸事件传递机制

    Android面试必问之触摸事件传递机制 一.Activity的构成 二.触摸事件的类型 三.事件传递的三个阶段 Activity对点击事件的分发过程 五.View的事件分发机制 六.点击事件分发的传 ...

  5. 音视频开发-音视频面试必问的直播延迟分析丨FFmpeg|SRS流媒体服务器|webrtc|Android NDK开发|HTTP-FLV|RTSP

    音视频面试必问的直播延迟分析 1.直播延迟500ms是极限吗,加上WebRTC能做到多少 2.推流的延迟分析 3.流媒体服务器延迟分析 4.拉流的延迟分析 视频讲解如下,点击观看: 音视频开发-音视频 ...

  6. Android技术篇!BAT等大厂必问技术面试题,吊打面试官系列!

    背景 首先我是个菜鸡,工资也低的一笔. 刚毕业时候在一家国企上班干 app 开发,干了快两年的时候,跳槽到了一家伪大厂干安全.投了不少简历都没有回音,只有这加伪大厂要我就来了.当时说好了会接触一些底层 ...

  7. linux驱动工程面试必问知识点

    linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...

  8. 面试必问的 Linux 命令帮你整理好啦 (下)

    如果我说 Linux 操作系统和命令是面试必问的,你相信么?不信,我们来看看企业招聘需求: 随便在某招聘网站上搜了一下测试工程师的技能要求,基本都有 Linux 操作系统和命令的要求.说明,这个技能确 ...

  9. 计算机网络八股文-面试必问

    搬运–面试必问计算机网络 原博客链接:https://www.nowcoder.com 每次面试问网络都还可以,整理了点资料,应付普通的问题没什么问题了. 除了字节的网络太为难人,其他公司都说回答的很 ...

最新文章

  1. 自动驾驶技术分级标准微调,全球竞争格局一夜剧变
  2. P2924 [USACO08DEC]大栅栏Largest Fence
  3. python是不是特别垃圾-Python 这语言真是混乱和原始
  4. 3D人脸识别预处理,3D face recognition preprocess
  5. 线程的run()方法带参情况
  6. Android 调用相册 拍照 实现系统控件缩放 切割图片
  7. Redmi Note 10系列细节曝光:有望4G/5G双版本齐发
  8. java通过jri 数据分析_SparkR安装部署及数据分析实例
  9. c#利用SWIG调用c++dll学习总结【转】
  10. 华为认证hcia含金量_华为hcna认证含金量高吗 华为hcna认证用处大吗
  11. 【MATLAB信号处理】信号波形的产生及系统时域分析
  12. php excel多级下拉菜单自动生成,Excel下拉菜单怎么做 多级联动+自动匹配教程
  13. 华为荣耀Linux笔记本评测,华为荣耀 篇一:荣耀MagicBook Pro详细评测 当下最值得推荐的高性能全面屏笔记本...
  14. python获取本机IP地址
  15. 团队博客-应用功能说明书
  16. 串口公头母头: RS232 DB9 公头 母头 串口引脚定义
  17. 【Java】线程池、Lambda表达式
  18. 百度地图定位经纬度返回4.9E-324有关问题
  19. 【微信小程序】退款功能教程(含申请退款和退款回调)
  20. 华为云OBS文件上传下载工具类

热门文章

  1. 这篇不讨好任何人的回忆录,记录了我从双非学校到BAT/TMD六offer的原因
  2. 图片处理算法工程师面试及笔试
  3. windows功能_【各种功能升级】微信windows版v2.9新体验
  4. a豆:在讲一个珍重每一个人的故事
  5. 运维派 企业面试题45 创建10个 用户 ; ping探测主机是否在线
  6. 计算机显示无法打开打印机添加,windows无法打开添加打印机怎么办 无法打开添加打印机解决方法...
  7. 空气质量(air quality) 简称:AQI 计算AQI等笔记
  8. html2canvas教程_HTML5 Canvas教程:简介
  9. 女生学python工作累吗_数据分析师女生做累么 工资一般多少
  10. k8s节点NotReady状态