Android四层架构
Andrid系统的体系结构设计为多层结构,这种结构在给用户提供安全保护的同时还保持了开放平台的灵活性。如下图所示:
从上到下进行简单介绍:
一、应用层 Applications:应用层由运行在Android设备上的所有应用构成,包括预装的系统应用和自己安装的第三方应用。大部分是由Java语言编写并运行在Dalvik虚拟机中,另一部分应用是通过c++/c语言编写的本地应用。但无论采用何种编程语言,两类应用运行的安全环境相同,都在应用沙箱中运行。而程序员正是在这层中,通过Android提供的组件和API进行开发,从而编写出形形色色的app。
二、应用框架层 Application Framework:集中体现Android系统系统的组件设计思想,是Android应用开发的核心,为开发者开发应用时提供基础的API框架。框架层由多个系统服务组成。我们知道Android应用是由若干个组件构成,组件与组件之间的通信是通过框架层提供的服务集中调度和传递消息实现的,而不是组件之间直接进行的。
- View System 主要用于UI设计,包括List、Grid、Text、Button、Webview等。
- Activity Manager Service -AMS 负责管理应用程序中的activity的生命周几以及提供activity之间切换功能等 Intent相关。
- Windows Manager Service-WMS 用于管理所有的窗口程序,如Dialog、Toast等。
- Recource Manager 提供非代码资源的管理 如布局文件、图形、字符串资源文件等。
- Location Manager 负责与定位功能相关功能
- Content Providers 提供了一组通用的数据访问接口,可用于应用程序间的内容交互,比如获取手机联系人数据等。
- Notification Manager 用户管理手机状态栏中的自定义信息等。
- Telephony Manager 手机底层功能管理模块,可用于获取手机串号或者调用短信功能
- Pacakage Manager Android系统内的包管理模块,负责管理安装的应用程序。
- XMPP Service 用于主持XMPP协议的服务,比如与Google Talk通信等
三、类库层:主要由类库 Libraries 和Android运行时 Android Runtime 两部分组成:
1.类库 Libraries 由一系列的二进制动态库构成,大部分来源于优秀的第三方类库,另一部分是系统原生类库,通常使用c/c++语言开发。(因为java代码无法直接调用c/c++驱动代码,所以在这一层,系统通过封装了一系列的函数库供上层使用.)以下列举一些比较重要的类库的功能,以供了解:
- Surface Manager: 负责管理显示与存取操作间的互动,另外也负责将2D绘图与3D绘图进行显示上的合成
- Media Framework: 一个开源的多媒体框架,允许我们创造出更高质量与全新的播放器效果
- SQLite: 安卓自带的数据库,是一个嵌入式的数据库
- OpenGL ES: 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。3D效果库
- FreeType: 一个完全免费(开源)的、高质量的且可移植的字体引擎。支持位图、矢量、字体等
- SGL: 2D图形引擎库
- SSL: 位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。是安全数据通信的支持。
- WebKit: 是一个开源的浏览器引擎。
- Libc: c层中最基本的函数库
2.Android运行时 Android Runtime 是由Java核心类库(Core Libraries)和Android虚拟机(Dalvik)共同构成。
Java核心类库包括框架层和应用层所用到的基本Java库。
Dalvik是为Android量身打造的Java虚拟机,它与标准Java虚拟机JVM的差别在于Dalvik是基于寄存器设计的,而JVM是基于栈结构设计的;JVM通过解码class文件(java编译生成的的:.java---.class 的class文件)中的内容来运行程序;而Dalvik运行时是由java字节码文件进一步转化而来的文件,,并被打包成一个DEX可执行文件,Dalvik虚拟机通过解释DEX文件来执行这些字节码 ,即android的class 文件实际上只是编译过程中的中间目标文件,需要链接成dex 文件后才能在dalvik 上运行;Dalvik能够更快的编译较大的应用程序,允许在有限的内存空间中同时运行多个虚拟机的实例,每一个Dalvik应用作为一个独立的Linux进程执行,这样可以防止某一虚拟机崩溃时所有的应用都被关闭。
四、系统内核层 Linux Kernel
Android内核具有和标准的Linux内核一样的功能,主要实现内存管理、进程调度、进程间通信(Android增加了一种进程间的通信机制IPC Binder)、设备驱动(Display Driver: 显示驱动;Camera Driver: 照相机驱动;Flash Memory Driver: 闪存驱动;Binder Driver: IPC通讯驱动;KeyPad Driver: 键映射驱动;Wifi Driver:Wifi驱动;Audio Driver:音频驱动;Power Management:电量管理驱动)等
作者:芒果味的你呀
链接:https://www.jianshu.com/p/cf260703f8ff
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Android四层架构的更多相关文章
- Android系统四层架构分享
Android系统四层架构 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 如果把Android系统看 ...
- android体系架构
android体系架构总结: android体系架构分为四层 第一层:应用层:applications 第二层:开发层 第三层:
- Android进阶(十一)Android系统架构讲解
如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...
- android基本架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA ...
- Android 笔记之 Android 系统架构
Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...
- Android系统架构说明介绍
Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...
- 转载: android 学习架构
http://www.cnblogs.com/forlina/archive/2011/06/29/2093332.html 引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWor ...
- Android程序架构基本内容概述
在Android操作系统中开发的应用程序都有一个结构缜密的架构.我们今天就来对这一Android程序架构做一个详细的分析.帮助大家了解程序开发的特点,以方便将来在应用程序开中明确自己的程序架构. An ...
- Android MVPR 架构模式
最近我在尝试让 Google 的 IO App 变得可单元测试,我这样做的其中一个原因是验证 Freeman 和 Pryce 在引用中对单元测试的总结.即使现在我还是没有把 IOSched 中的任何一 ...
随机推荐
- 实践作业3:白盒测试----小组分工讨论DAY2
白盒测试需要通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致.我们小组在下课时候,在东九教学楼教师休息室进行了 ...
- HDU 3724 Encoded Barcodes (Trie)
题意:给n个字符串,给m个询问,每个询问给k个条形码.每个条形码由8个小码组成,每个小码有相应的宽度,已知一个条形码的宽度只有2种,宽的表示1,窄的表示0.并且宽的宽度是窄的宽度的2倍.由于扫描的时候 ...
- 余额宝 vs. P2P网贷,谁更有生命力?
余额宝跟P2P网贷作为一个理财方式,要说谁更有生命力,那就必须从以下几个方面说起,一是收益性,二是风险性,三是流动性,下面从这几个方面来对比一下余额宝跟P2P网贷. 首先是收益性,作为投资理财者,第一 ...
- 分享一个利用HTML5制作的海浪效果代码
在前面简单讲述了一下HTML里的Canvas,这次根据Canvas完成了“海浪效果”(水波上升). (O(∩_∩)O哈哈哈~作者我能看这个动画看一下午) 上升水波.gif 动画分析构成:贝塞尔曲线画布 ...
- python函数作用域,闭包,装饰器
第一:函数作用域: L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间(闭包) G:global 全局作用域 B:build_in ...
- linux操作之文本编辑器
1.文本编辑器的作用 编辑和修改系统中的那些以文本形式存在的文件(特别是各种配置文件),也可以用于 编写程序代码 2.linux下的常见编辑器 nano.Emacs.gedit.vim等 3.vim三 ...
- WebGL学习之法线贴图
实际效果请看demo:纹理贴图 为了增加额外细节,提升真实感,我们使用了漫反射贴图和高光贴图,它们都是向三角形进行附加纹理.但是从光的视角来看是表面法线向量使表面被视为平坦光滑的表面.以光照算法的视角 ...
- 停止memcached服务
telnet 127.0.0.1 11211 进入memcache stats 查看pid号 退出memcache kill -9 pid号
- php 大文件读取
当你需要处理一个5G的文件里面的数据时,你会怎么做,将文件里面的内容全部读取到一个数组里面去? 显然这种做法对小文件是没有问题的,但是对于大文件还是不行的 这时就需要用到 yield 了 ,注意这是 ...
- Linux常用的命令(3)
1 文件的内容显示 cat 显示全部 more: 分屏幕显示,只能向后翻 less: 分屏幕显示,可以向上翻 head:查看前n行 默认10行 tail:查看后n行 -n -f: 查看文件尾部,不退出 ...