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