热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android的学习之路一一初识Android四层架构

                                    Android的系统架构

由于工作需要决定学习移动端开发然后在IOS和Android这两个里面选择了Android做为学习对象。同时也决定以写博客的方式来记录这个学习的过程,一方面可以让自己养成一个写博客的习惯,一方面可以通过博客来记录知识点以及学习中所遇到的问题。同时也打算将学习过程中的一些Demo放到github上。

                                                                                                                                                                            小菜鸟


 

1-1. Android的系统架构

为了了解Android系统是如何工作的,我们非常有必要的看它的系统架构。它的架构分为4层:Linux内核层、系统运行库层、应用框架层和应用层。附上一张架构图。

Android的学习之路 一一初识Android四层架构L

Linux  Kernel(Linux内核层):

因为Android系统是基于Linux2.6的,所以从上面图中我们可以看到这一层为Android设备的各个硬件提供底层的驱动,安全服务、内存管理、进程管理和网络管理也是由这层提供的。Linux内核层是软件和硬件之间的一个抽象层,它使硬件的细节得以隐藏然后为上层服务提供统一的服务。

和OSI/RM七层模型一样,使用下层提供的服务去为上层提供统一的服务,这样就可以屏蔽掉本层和下层的差异,使得本层及下层发生变化时不影响上层。一句话概括就是高内聚低耦合啦。

Android Libraries(系统运行库层):

在这一层中通过一些C/C++库来为Android提供主要的特性支持,而这些特性将通过android的运用层框架(Application Framework)提供给开发者。

核心库:

libc(系统C库):标准C系统库的BSD衍生,是系统中最底层的一个库,调整为基于嵌入式Linux设备。

SGL: 底层的2D图像引擎。

SSL (SecureSocket Layer):位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

SQLite:个通用的嵌入式本地数据库

FreeType: 位图和矢量字体渲染

WebKit :网络浏览器的的核心,WebView的内核

OpenGL|ES:基于OpenGL|ES 1.0 APIs的一个实现;这个库使用硬件的3D加速,或者使用内置的高度优化的3D软件光栅

Surface Manager ( 界面管理):负责管理显示与存取操作时间的互动,另外也负责将2D绘图与3D绘图进行显示上的合成。

Media Framework (多媒体框架):这部分是Android多媒体的核心部分,基于PacketVideo的OpenCORE,这个库一部分是音频和视频的回放,一部分是音频和视频的记录。同时这个库也支持静态的图片文件,包括JPG、PNG、MP3、MPEG等。

Android Runtime(同属于系统运行库层) : 

Core libraries: 这是一个Android的核心库的集合,提供了大部分在Java编程语言核心类库中可用的功能。

Dalvik Virtual Machine(Dalvik虚拟机):每一个Android运用程序都是Dalvik虚拟机中的实例,运行在他们自己的进程中。而Dalvik虚拟机则被设计成可以在一个设备高效的运行多个虚拟机。Dalvik虚拟机的可执行文件格式为.dex,这是为Dalvik专门设计的一种压缩格式,适合内存和处理器速度有限的系统。

画重点:Dalvik虚拟机依赖于Linux内核提供的基本功能,如线程和底层的内存管理。还有就是Dalvik虚拟机是基于寄存器的,而大多数虚拟机包括JVM在内是基于栈的。基于寄存器机器需要的机器指令大于基于栈需要的机器指令。一个dex文件通常会有多个.class。

 

Application Framework(运用框架层):

这一层呢主要是提供了构建应用程序时需要用到的各种 API,Android自带的一些核心应用就是通过API来完成的,我们开发也是通过使用这些API来构建自己的应用程序了。

Activity Manager(活动管理器):管理应用程序的生命周期,提供通用的导航回退功能,为系统中所有运行着的Acticity提供交互接口。

Window Manager(窗口管理器):管理系统中的所有窗口。

Content Providers(内容提供器):使应用程序能共享自己和访问其他应用软件的数据。

View System(试图系统):测量各个UI元素的尺寸;确定各个UI的位置;当内容发生变化时进行重绘;接收和分配事件;处理来自window manager的很多和窗口状态有关的回调。

Notification Manager(通知管理器):可以使得所有应用程序能在状态栏显示自定义的通知。

Package Manager(程序包管理器):管理应用程序包,也可通过该管理器获取应用程序的信息。

Telephony Manager(电话管理器):提供Telephony相关信息的查询/修改功能以及Phone状态监听功能。

Resource Manager(资源管理器):可以使应用程序访问非代码资源,如本地化字符串、布局文件等。

Location Manager(位置管理器):可以使应用周期性的获取当前经纬坐标。

XMPP Manager(即时通信管理器):为应用程序提供即时通讯服务。

Applications(应用层):

所有安装在Android系统上的应用程序都属于这一层。所有应用程序都由Java编写。


这节的笔记内容里主要是记得Android的四层架构,对Android的整体也有了一个新的了解,也温故了一些计算机网络和JVM.

                                                                   路漫漫其修远兮!加油!

 

 

 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
author-avatar
红烧大青虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有