Android学习笔记<二> Android架构

    学习一个新的知识,我总想对其有一个直观的印象。在这基础上,会产生一种偷窥的欲望,想通过窥视它的冰山一角,了解它内部秘密。 撕开它神秘的面纱的时候到了,让我们拭目以待(哈哈):

1.Android系统架构图

    网上找了一些,觉得就这张比较全面一些,请大家鉴赏:

                       

2.  Android的系统架构分为四层:应用,应用框架层,系统运行库,Linux kernal内核层

     对于一个成熟的操作系统来说,分层是必须的,因为分层可以屏蔽差异,可以提供抽象,可以减小改动带来的影响,提高系统健壮性和可扩展性等等等(此处省略10000字),大家都懂的哈......

1.Android应用层

       应用层就是我们基于Android平台开发的JAVA程序,不过它有着自己的格式,包括资源文件,JAVA程序等,最终生成一个.apk的包,而这个就是我们经常下载使用的程序安装包。这个程序运行在Dalvik 虚拟机上(类似JVM,根据手机特性进行了一些修改和变化)。

    Google在Android中内置了一些必要的应用程序,如联系人,拨号,短信,主屏幕,日历,地图,浏览器等程序。与其他手机操作系统固化在系统内部的系统软件不同,这些应用程序都是可以被开发人员开发的其他应用程序所替换。

     应用程序开发者可以使用Android的API 实现自己的程序。这个就是Android开发者所征战的主战场--Android应用开发。

 

2.应用程序框架层

      Android的应用程序框架主要为Android开发者提供API框架,我们的程序都是通过框架与Android底层进行交互的。个人觉得跟windows/linux API是一个层面的东西。 

    应用程序框架层主要包括以下各种控件:

  • View 视图:可以用来构建应用程序,包括List, Grid, TextBox, Button 以及可嵌入的Web浏览器。
  • Content Providers 内容提供器: 让一个应用程序访问另一个程序的数据,或共享自己的数据。
  • Resource Manager资源管理器:提供非代码资源的访问,如本地字符串,图形和布局文件(Layout file).
  • Nofitication Manager通知管理器: 应用可以在状态栏中显示自定义的提示信息。
  • Activity Manager活动管理器:用来管理应用程序生命周期并提供常用的导航退回功能。
  • Window Manager窗口管理器:管理所有的窗口程序。
  • Package Manager包管理器:Android系统内的程序管理。

     下面是Android框架组件的四大天王:

  Activity (活动)

  Broadcast Intent Receiver (广播意图接收者)

  Service (服务)

  Content Provider (内容提供者)



3. 系统运行库层(C/C++库和Android运行环境RunTime)

    本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容 大多是使用C++实现的。当使用Application Framwork 层时,Android系统通过C/C++库支持我们使用的Application Framework内的各个组件。

 

C/C++库包括:

  • Bionic系统C库:这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。
  • MediaFramework多媒体库:Android系统的多媒体库的核心部分,基于PacketVideo(即PV)的 OpenCORE, 此库从功能上一共分为两大部分,一部分是音频,视频的回放(PlayBack),另一部分是音视频的记录(Recorder)。此库支持多种常见格式的音频,视频的回放和录制,以及图片,MPEG4, MP3, AAC, AMR, JPG, PNG等。
  • SGL:2D图形引擎库
  • SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。
  • OpenGL ES 1.0:提供3D 的支持
  • Surface Management界面管理工具:提供了对管理显示子系统等功能。
  • SQLite: 一个通用的嵌入式关系数据库。
  • Webkit: web 网络浏览器引擎
  • FreeType:位图(Bitmap)及矢量字体(Vector)的功能

   Android的各种库一般是以系统中间件形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。

 Android 运行环境主要指的虚拟机技术——Dalvik。Android中的所有Java程序都是运行在Dalvik VM上的。Android上的每个程序都有自己的线程,DVM只执行.dex的Dalvik executable 文件。每个Android应用在底层都对应有一个独立的DVM实例并在其解释下执行。

  

    虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.class byte code 文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android VM虽然也是是用Java语言进行编程, Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。

    

    每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based)而Dalvik是基于寄存器的虚拟机(Register-based)。 显然,后者最大的好处在于可 以根据硬件实现更大的优化,这更适合移动设备的特点。

    DVM非常适合在移动终端上使用,与PC相比,它不需要很快的CPU和大量的内存空间. Google的测算显示,64MB的内存已经能让系统正常运转了。 其中24MB被用于底层系统的初始化和启动。另外20MB被用于启动高层服务。DVM有如下特征:

  • 使用专有的.dex格式。
    • 原因是java类文件在编译过后,会产生至少一个.class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。
    • 增加了对新的操作码的支持
    • 文件结构尽量简洁,使用等长的指令,借以提高解析速度。
    • 尽量扩大只读结构的大小,借以提高跨进程的数据共享。
  • dex的优化,dex文件的结构是紧凑的,但是如果想提高运行时的性能,就需要对dex文件进行进一步的优化,这些优化针对以下几个方面:
    • 验证dex文件中的所有类
    • 对一些特定的类和方法里面的操作码进行优化
    • 调整所有的字节序(Little_endian)和对齐结构中的每一个域
  • 基于寄存器,基于寄存器的虚拟机虽然比基于堆栈的虚拟机在硬件,通用性上要差一些,但是它的代码执行效率去更好
  • 每一个Android应用都运行在它自己的DVM实例中,每一个DVM实例都是一个独立的进程空间。 所有的Android应用的线程都对应一个Linux线程,DVM因此可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,不同的应用都是用不同的Linux用户来运行以最大程度地保户应用程序的安全性和独立性。

4. Linux kernal 内核

    Android使用Linux2.6内核作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android系统的安全性,内存管理,进程管理,网络协议栈和驱动模型等都依赖于该Linux2.6内核。该内核同时也作为硬件和软件栈之间的抽象层。

    Android对操作系统的使用包括核心和驱动程序两部分 ,Android更多的是需要一些与移动设备相关的驱动程序。 主要的驱动如下所示:

  显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动

  键盘驱动(KeyBoard Driver): 作为输入设备的键盘驱动

  Flash内存驱动(Flash Memory Driver): 基于MTD的Flash驱动程序

  照相机驱动(Camera Driver): 常用基于Linux的v4l2(Video for Linux)驱动。

  音频驱动(Audio Driver): 常用基于ALSA(Advanced Linux Sound Architecture),高级Linux声音体系)驱动

  蓝牙驱动(Bluetooth Driver): 基于IEEE 802.15.1标准的无线传输技术

  WiFi驱动(Camera Driver): 基于IEEE 802.11标准的驱动程序

  Binder IPC驱动: Android一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能

  Power Management(电源管理):比如电池电量等

 


在Android中,各种包写成android.*的方式,重要包的描述如下所示:

  • android.app :提供高层的程序模型、提供基本的运行环境

  • android.content :包含各种的对设备上的数据进行访问和发布的类
  • android.database :通过内容提供者浏览和操作数据库
  • android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕 上.
  • android.location :定位和相关服务的类
  • android.media :提供一些类管理多种音频、视频 的媒体接口
  • android.net :提供帮助网络 访问的类,超过通常的java.net.* 接口
  • android.os :提供了系统服务、消息传输、IPC机制
  • android.opengl :提供OpenGL的工具
  • android.provider :提供类访问Android的内容提供者
  • android.telephony :提供与拨打电话相关的API交互
  • android.view :提供基础的用户界面接口框架
  • android.util :涉及工具性的方法,例如时间日期的操作
  • android.webkit :默认浏览器操作接口
  • android.widget :包含各种UI元素(大部分是可见的)在应用程序的屏幕中使用
这一块同样木有啥好温习的,借鉴网上的资料....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值