75.Android之基本架构

转载:http://www.cnblogs.com/lijunamneg/archive/2013/01/18/2866953.html

Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。

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内核的一些功能,比如线程机制和底层内存管理机制。
  
4) 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。

转载于:https://www.cnblogs.com/benchao/p/5839736.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TTL转485电路设计

在 TTL/CMOS 转接半双工 RS485 的电路设计中,由于半双工的特性,需要有信号来控制 485 转接芯片的发送和接收使能端,因此需要具体场景具体分析。 如果是使用 MCU 或者自带发送状态指示脚功能(指示当前是否在进行串口发送&#xff0…

flash 动画

浏览着网页不知道该干些什么,突然看到好看的flash动画,其实虽然自己编程序,可是真的觉得很羡慕那些美工同事,做的东东真的很漂亮。看着讲解做着做着,唉,跟人家的对不上了,呵呵,成了另…

USB芯片选型

从 USB 芯片的使用角度来说,USB 系列芯片可以划分为 USB 接口芯片与内置 USB 功能的微控制器。前者对于跨平台和易用性方面比较有优势,无需了解芯片内部工作机制,按照芯片的手册以及官方例程来操作就可以了,而使用平台也比较开放&…

HTML5 文件域+FileReader 分段读取文件(四)

一、分段读取txt文本 HTML&#xff1a; <div class"container"><div class"panel panel-default"><div class"panel-heading">分段读取文件&#xff1a;</div><div class"panel-body"><input type&q…

CH340安卓驱动使用教程

使用 CH340/CH341 可以很容易在 Android 平台下实现 USB 转串口的功能&#xff0c;由于 CH340/CH341 是 USB 设备&#xff0c;如果使用手机或者平板来操作该芯片的话&#xff0c;就需要满足以下需求&#xff1a; 1. 需要基于 Android 3.1 及以上的系统 2. Android 设备具有 U…

undefined reference to

关于undefined reference这样的问题&#xff0c;大家其实经常会遇到&#xff0c;在此&#xff0c;我以详细地示例给出常见错误的各种原因以及解决方法&#xff0c;希望对初学者有所帮助。 1. 链接时缺失了相关目标文件&#xff08;.o&#xff09; 测试代码如下&#xff1a; 然…

epoll为什么比select和poll效率更高

基于 select 和 poll 方法的程序中&#xff0c;因为大量操作的消耗与当前连接数 n 成线性相关&#xff0c;从而导致单个任务的资源消耗和当前任务的关系是 O(n)。所以随着连接数目增大&#xff0c;积累起来的资源消耗很大&#xff0c;结果就是系统吞吐量和机器性能不匹配。为了…

Android 系统使用USB OTG功能/打开USB Host API功能

步骤一&#xff1a;确定 Android 设备是否支持 USB Host 功能&#xff0c;具体可以通过以下步骤进行确认&#xff1a; 1. 查看手机或平板设备参数&#xff0c;或者直接联系厂家咨询&#xff1b; 2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测&#xff0c;汉化版软件…

Android开发之Handler

Handler 定义与作用 主要接受子线程发送的数据&#xff0c; 并用此数据配合主线程更新UI。 解释&#xff1a;当应用程序启动时&#xff0c;Android 首先会开启一个主线程&#xff08;也就是UI线程&#xff09;&#xff0c;主线程为管理界面中的UI控件&#xff0c;进行事件分…

Android日志Log使用

Android开发中日志工具的使用是十分重要的&#xff0c;可以帮助我们定位和查找程序执行的问题&#xff0c;了解程序执行过程等。这里以 Eclipse 下的的安卓开发为例进行说明。 打开 LogCat 功能 首先&#xff0c;确保 Eclipse 软件中已经打开了日志工具 LogCat 功能&#xff…

Android项目目录结构

在 Eclipse 中新建或者打开一个 Android 项目&#xff0c;可以看到目录视图如下所示&#xff1a; 其实项目开发中&#xff0c;使用频率较高的并不多&#xff0c;我们只要了解清楚不同类型的文件和不同目录的对应关系就可以了。 1. src src 目录用于存放 Java 代码&#xff0…

Libusb开发教程二 API介绍与使用

背景介绍 上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程&#xff0c;除了 libusb-1.0.9.tar.bz2 离线包之外&#xff0c;还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义&#xff0c;第二个是先前版本的兼容包&#xff0c;因此在使用过程中&#xff0c;开发者就…

tty,串口,控制台与驱动程序

tty 设备的名称是从过去的电传打字机缩写而来&#xff0c;最初是指链接到 Unix 系统上的物理或者虚拟终端。随着时间的推移&#xff0c;当通过串行口能够建立起终端连接后&#xff0c;这个名字也用来指任何的串口设备。物理 tty 设备的例子有串口、USB 到串口的转换器&#xff…

Linux 串口编程一 一些背景

在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节&#xff0c;实际上串口编程已经被概括在了“终端”或者“终端IO”章节里面。在上一篇博客中对经常出现的几个容易混淆的概念进行简单描述&#xff1a;tty&#xff0c;串口&#xff0c;控制台与驱动程序。后面会…

Linux 终端概述与分类

该博文已经迁移到其他博客&#xff0c;参见&#xff1a; Linux 终端IO概念与背景介绍

Linux tty驱动程序一 架构

tty 核心概览如下图所示&#xff1a; 可以看到&#xff0c;tty 架构的划分层次&#xff0c;由下至上的逻辑关系为&#xff1a;硬件 -> tty 驱动 -> tty 线路规程&#xff08;也译为行规程&#xff09;-> tty 核心 -> 用户层。 内核负责控制 tty 设备的数据流&…

Linux 串口编程二 深入了解 termios

前言 这一系列串口编程重点在应用层编程&#xff0c;但是在讲解原理与相关概念时需要对驱动框架有个基础的认识。如果只是浅尝辄止&#xff0c;以后在遇到串口驱动与应用层程序调试难免遇到瓶颈。关于 tty驱动架构参见我的其他博客&#xff1a;Linux tty驱动程序架构。有时了解…

Libusb开发教程三 USB设备程序开发

首先&#xff0c;需要指出本篇博客的基础仍然是基于 libusb V1.0 以下。主要考虑到保持与之前博客的连贯性&#xff0c;在上一篇博客中介绍了老版本中可以被调用的 API 以及功能介绍&#xff0c;对于库中 API 接口函数的使用相信读者会一目了然&#xff0c;不需要刻意记忆&…

Linux 串口编程三 使用termios与API进行串口程序开发

在 termios 结构体以及内部终端控制标志中&#xff0c;并非所有的参数对于实际的物理串口都是有效的&#xff0c;在使用过程中也不需要对于所有标志的作用都有所理解。事实上&#xff0c;快速掌握一项技术的核心点也是一种学习能力。对于使用&#xff0c;熟悉并掌握操作框架十分…

Linux 串口编程四 串口设备程序开发

Linux 串口编程和程序相对来说是很简单的&#xff0c;之所以用博客连载来展示&#xff0c;主要是想在学会使用的基础上掌握相关背景&#xff0c;原理以及注意事项。相信在遇到问题的时候&#xff0c;我们就不会对于技术的概念和 API 的使用浅尝辄止了。下面进入具体应用案例&am…