1. Dalvik虚拟机
    1. Basics
      1. 是由Dan Bornstein编写的
        1. 名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛
      2. Android平台的Java虚拟机
      3. .dex(即Dalvik Executable)格式的Java应用程序
      4. 所有的Android应用的线程都对应一个Linux线程
      5. .dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统
      6. 允许在有限的内存中同时运行多个虚拟机的实例
      7. 每一个Dalvik 应用作为一个独立的Linux 进程执行
      8. dx是一套工具,可以将 Java .class 转换成 .dex 格式. 一个dex档通常会有多个.class
      9. Dalvik支持JIT(just-in-time,即时编译技术)(2.2~)
    2. Dalvik和JVM
      1. Dalvik虚拟机既不支持Java SE 也不支持Java ME类库(如:Java类,AWT和Swing都不支持)。 相反,它使用自己建立的类库(Apache Harmony Java的一个子集)。
      2. Dalvik 基于寄存器,而 JVM 基于栈
    3. ART的处理机制( 未来的android)
      1. 在应用程序安装时就把程序代码转换成机器语言,让程序成为真正的本地应用
    4. 架构
    5. Android应用编译及运行流程
    6. Android的初始化流程
    7. Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理
  2. Architecture(庖丁解牛)
    1. 应用程序(application)
      1. Activity
        1. 代表手机屏幕的一屏,相当于浏览器的一个页面
          1. 当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕。
      2. Intent
        1. 一个Intent就是一次对将要执行的操作的抽象描述,通过Intent可以在多个Activity之间进行跳转,Intent两个最重要的部分是动作(action)和动作对应的数据,典型的动作类型有,MAIN、view、pick、edit等,而动作对应的数据则以URI的形式表示
        2. 可以使用BroadcastReceiver来让应用对外一个外部的事件作出响应。
        3. BroadcastReceiver通过NotificationManager来通知用户这些事情发生了
      3. Service
        1. Service是一种程序,它可以运行很长的时间,相当于后台的一个服务
      4. Content Provider
        1. 程序之间数据的交互是通过Content Provider来实现
    2. 应用程序框架(Application Framework)
      1. view(UI组件):这些UI组件包括List、textbox、button
      2. Content Provider:提供一种机制,通过这个机制应用程序可是实现数据库共享和互访;
      3. Resourse Manager:负责管理非代码的访问,如图片、xml以及国际化资源文件;
      4. Notification Manager:让程序将警示信息显示在状态栏上
      5. Activity Manager:管理着应用程序的生命周期
    3. 各种库和android运行环境Runtime
      1. 系统C库:
        1. 一个从BSD 继承来的标准C系统函数库(LibC),他是专门基于嵌入式Linux的设备定制的
      2. 媒体库:基于packet Video OpenCORE,该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件;
      3. Surface Manager:对显示子系统的管理,并且为多个应用提供了2D和3D图层的无缝融合;
      4. Lib WebCore:一个最新的web浏览器引擎, 用来支持android浏览器和一个可嵌入的web试图;
      5. SGL:底层的2D图引擎
      6. 3D libraries:基于openGL ES 1.0 apis实现,该库可以用硬件3d加速或者使用高度优化的3D软加速;
      7. FreeType:位图(bitmap)和vector字体显示
      8. Sqlite:关系型数据库
      9. SSL:即Secure Socket Layer,位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持
      10. OpenGL ES 1.0:提供了对3D的支持
    4. OS
      1. Linux Kernel 2.6
        1. 安全
        2. 内存管理
        3. 进程管理
        4. 网络堆栈
        5. 驱动模型
          1. 显示驱动(Display Driver):常用基于Linux的帧缓冲(Frame Buffer)驱动。
          2. Flash内存驱动(Flash Memory Driver):是基于MTD的Flash驱动程序
          3. 相机驱动(Camera Driver):常用基于Linux的v4l驱动
          4. 音频驱动(Audio Driver):常用基于ALSA(Advanced Linux Sound Architecture,高级Linux声音体系)的驱动
          5. WiFi驱动
          6. 基于IEEE 802.11标准的驱动程序
          7. 键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动
          8. 蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术
          9. Binder IPC驱动:Android中一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能
          10. Power Management(能源管理):管理电池电量等信息
  3. 核心的无非就是三样东西OS( Linux Kernel ) + VM + APP
    1.  1. bootloader:用来启动操作系统
    2.   2. kernel: 系统内核
    3.   3. 核心进程, /system/bin
    4.   4. so库: 系统运行基础, /system/lib
    5.   5. Android虚拟机,所有的上层应用都是靠虚拟机来运行的
    6.   6. Android Framework: 所有的上层应用都是通过调用Framework来实现功能的, /system/framework
    7.   7. 上层应用,比如说桌面Launcher, 拨号,短信,通讯录之类, /system/app
  4. 基于Linux整合开发的开源嵌入式操作系统