一、Android的系统体系结构

Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图:
通过安卓系统体系结构图,我们主要理解,安卓系统可以分为4层,最上层的其实就是我们编写的系统程序,也就是Application(App),我们开机显示的拨打电话和短信、浏览器等App都属于开发出来的应用程序。只是手机生产厂商在手机出厂时默认给手机安装了这些内置应用程序。这些程序和我们自己开发的程序的最大区别就是不可以卸载。不可卸载的程序我们称为系统程序,如果你熟悉安卓源码,你也可以开发一个不可卸载的安卓程序。
然后下一层就是Application Framework系统应用框架层,什么是系统框架呢?我们开发一个App,习惯性的会把常用的一下代码做成公用的模块,这个被抽取出来的公用模块就是应用的框架。安卓的应用程序框架大致可以分为9个模块7个管理者模块和内容提供者模块、界面系统;7个管理者模块分别是Activity(界面)、Window(窗口)、Package(包)、Telephony(打电话)、Resource(资源)、Location(定位)、Notification(通知)。
再下一层是系统类库层,主要就是一些so文件,用于调用c++代码来执行底层的驱动程序,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。JNI Java Native Interface(Java本地接口)。系统类库总共有9个系统类库,分布是Surface Manager、Media Framework、 SQLite、OpenGL&ES、FreeType、WebKit、SGL、SSL、libc。还包含了Android Runtime安卓运行环境包括Core Libraries、Dalvik Virtual Machine。提供了Java代码的运行环境,但是Dalvik虚拟机运行和Java虚拟机的运行有很大的区别,



android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C++语言编写的程序库,红色的代码内核(linux内核+driver)。在Application Framework之下,由C/C++的程序库组成,通过JNI完成从JAVA到C的调用。

  1. 应用程序
    所有的应用程序都是使用JAVA语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动在多种状态之间进行切换。
    利用JAVA的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这点正是Android的精髓所在。

  2. 应用程序框架
    应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件。
    隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
    a.丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
    b.内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
    c.资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layout files)。
    d.通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
    e.活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

  3. 系统运行库
    a)程序库
    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
    以下是一些核心库:
    主要包括基本的C库、以及多媒体库以支持各种多媒体格式、位图和矢量字体、2D和3D图形引擎、浏览器、数据库支持。
    1.Bionic系统C库。
    2.媒体库,基于PacketVideo OpenCORE。
    3.Surface Manager 顾名思义,用于管理Surface。
    4.Webkit,LibWebCore 浏览器,基于Webkit引擎。
    5.SGL 底层的2D图形引擎
    6.3D libraries 基于OpenGL ES 1.0 APIs实现
    7.FreeType 位图(bitmap)和矢量(vector)字体显示。
    8.SQLite 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

    另外这里还有一个硬件抽象层。其实Android并非所有的设备驱动都放在linux内核里面,有一部分实现在用户空间,
    这么做的主要原因是可以避开Linux所遵循的GPL协议,一般情况下如果要将Android移植到其他硬件去运行,
    只需要实现这部分代码即可。包括:显示器驱动,声音,相机,GPS,GSM等等。

b)Android 运行库
Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
每一个 Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。
Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。
同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的 “dx” 工具转化成.dex格式由虚拟机执行。
Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

  1. Linux 内核
    Android 的核心系统服务依赖于 Linux 2.6 内核 ,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。
    Linux 内核也同时作为硬件和软件栈之间的抽象层。其外还对其做了部分修改,主要涉及两部分修改:
    a)Binder
    (IPC):提供有效的进程间通信,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因
    其实现了自己的一套。
    b)电源管理:为手持设备节省能耗。
    最后在谈谈Android所采用的语言,其应用开发采用java语言,我们所说的java一般包含三个部分:
    a) java语言:即其语法,其写代码的程式
    b) java虚拟机:为了实现一次编译到处可以运行的原则,java在编译连接以后并没有产生目标机器语言,而是采用了Java bytecode
    这种Java共用指令,这时就需要一个虚拟机来执行改指令。
    c) 库:跟我们常用的C语言一样提供一些常用的库
    后两者结合就是Java Runtime Environment。
    二、Android的四种常用组件

我们现在推崇的软件开发就是基于组件来开发的,组件就类似于电脑的硬件一样,我如果要组装一台电脑,可以直接通过购买各个硬件然后将其组装在一起,对于软件来说,组件就类似于这个,我们开发一个软件,可以直接将这些组件组合在一起就行了。

Android一共有四种常用的组件:

Activity、Service、ContentProvider、BroadcastReceiver

Activity:Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的,比如一个文本框,按钮这些就是显示在Activity上的,并且可以接收数据,传递数据到后台,然后再显示出来。

Service:Service我们是看不见的,对于绝大部分的数据的处理,业务的处理都是通过Service来完成的。

ContentProvider:ContentProvider类似于我们的档案馆,里面存放了我们的各种数据,例如通讯录中的信息等,这个组件就是运行程序对其进行访问,然后得到里面的数据。

BroadcastReceiver:BroadcastReceiver组件是广播接收器,主要是用来监听系统的各个行为的,例如当电量不足的时候会给我们发送一条广播信息。

三、Activity的启动流程

我们在大致了解了Android的体系结构后,我们就可以开始进行我们的代码操作了,首先我们来看看Activity的一个启动流程:

当运行我们的Android应用程序时,Android操作系统首先会去找我们的AndroidManifest.xml这个文件,这个文件是我们应用程序的主配置文件,因为我们一个应用可能有多个的Activity,那我们首先会展示哪个Activity呢?这个主配置文件就定义了当前这个应用默认所加载的那个Activity对象,找到这个Activity对象后,就会调用其onCreate()方法,这个方法主要就是用来加载我们的布局文件的,通过 setContentView()方法可以来加载我们指定的布局文件,最后根据布局文件中的各个控件显示在我们的屏幕上。这个就是我们Activity的启动流程。

Fragment生命周期图:

Android系统架构-----Android的系统体系架构相关推荐

  1. 软件体系架构模式之三微内核体系架构

    当您的软件系统或产品包含许多与外部实体的集成点时,微内核体系结构模式将非常有用.最重要的是,您将无法准确判断出将来将哪些实体集成到您的系统中.可以将微内核架构模式识别为基于插件的模式..也称为插件架构 ...

  2. 网站架构和Servlet技术体系架构

    一.网站架构 现在的网站架构分为 B/S架构和C/S的架构两种. B/S结构有很多好处,维护和升级方式更简单,客户端是浏览器,基本不需要维护,只需要维护升级服务器端就可以. C/S结构是一种软件系统体 ...

  3. mysql 架构名_MySQL 逻辑体系架构

    [逻辑架构] 第一层:所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等. 第二层:通常叫做 SQL Layer.在 MySQL ...

  4. IT规划中的技术体系架构

    IT规划中的技术体系架构体系架构通常会建立一个共有的能帮助今后持续发展的信息扩展基础,然而,简单的设定目标是远远不够的,必须和构建人员.客户.厂商及其他相关人员进行沟通以达成共识,在构建过程中要维护该 ...

  5. 【转】BI 入门: 体系架构及相关技术

    (1) 老板,你要这么多数据做什么?         假如你是一个商品零售公司的老板.     你的公司很先进,已经实现了业务信息化,每一笔销售单据都保存在数据库中,日积月累,已经保存了十余年的销售数 ...

  6. 谈谈SOA面向服务体系架构的安全问题

    谈谈SOA面向服务体系架构的安全问题 本文我们讨论的是面向服务体系架构(SOA)的安全应用.在展开讨论之前,首先让我们来解析面向服务体系架构的实际含义.面向服务体系架构是一种涉及若干以服务为导向的应用 ...

  7. ARM体系结构与编程(篇二):ARM体系架构与寄存器介绍

    文章目录 前言 一.ARM内核与架构 1.1 ARM芯片的组成 1.2 ARM指令集与架构 二.ARM处理器模式与寄存器 2.1 ARM处理器模式 2.2 ARM寄存器 前言 该文章是通过学习< ...

  8. Android系统四层体系架构

    Android体系架构分为四层:应用层.应用框架层.库层.内核层.(盗用一张图) 一.应用层 应用层包括手机上的所有APP,无论是系统自带的还是用户开发的.他们都是基于第二层应用框架层开发的. 二.应 ...

  9. 基于android2.3.5系统:源码下载及android体系架构

    **************************************************************************************************** ...

最新文章

  1. python【数据结构与算法】红黑树概念辨析
  2. 封装fetch的使用(包含超时处理)
  3. #论文 《Deep Residual Learning for Image Recognition》
  4. C++中placement new操作符(经典)
  5. 体验 Orbeon form PE 版本提供的 JavaScript Embedding API
  6. [转]迭代、集合、字典表和列表
  7. 【Lintcode】029.Interleaving String
  8. GridViewDetailsView对XML文件增删改
  9. jenkins结合ansible用shell实现自动化部署和回滚
  10. 最受白领欢迎的12大办公软件
  11. 腾讯广告“虚拟IP”赛题突出重围,入选第七届“互联网+”双创大赛产业命题
  12. 外贸视频教程[外贸人zencart自助建站视频教程]:第一课
  13. Premiere Elements使用教程:将音乐添加到视频片段
  14. Linux 开源 ssh 工具,【原创开源】jssh linux scp ssh 免密登录工具
  15. android hd 输入法,Android上好用的Lime HD中文输入法03--更好的使用篇
  16. win10/ubuntu18.04 双系统开机黑屏,无法通过grub 选择系统,直接进入Ubuntu系统
  17. PYNQ小白学习记录--开箱调用摄像头实现人脸识别
  18. 李建忠设计模式之”数据结构“模式
  19. sql查询昨天的所有数据
  20. Java Spliterator接口总结 Spliterator接口注释翻译和解析中英文对照版

热门文章

  1. 蓝桥云课——单词分析(C++)
  2. ZEMAX | 如何使用 OpticStudio 设计车标投影系统 Ⅰ
  3. 拓嘉辰丰:拼多多要快速获取流量有哪些方法
  4. 青软实训.NET学习笔记(2)
  5. Windows 关机到计时
  6. flex 联机游戏开发 - 四国军棋游戏:(三) 核心类
  7. win10完全卸载office2010
  8. html jq页面跳转页面,jQuery实现页码跳转式动态数据分页
  9. 这样写简历,不愁被问职业规划!
  10. 推荐软件:Quset PowerGUI