1、Android系统架构

最新的Android系统分为五层六区(域):

  1. Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等;
  2. 硬件抽象层(android hardware abstraction layer):安卓驱动硬件的方式与Linux不尽相同。传统Linux的驱动完全存活于内核空间。Android则在内核外部增加了硬件抽象层(HAL, Hardware Abstraction Layer),把一部分驱动功能放到HAL层中。安卓为什么费尽麻烦增加一个HAL呢?为了保护源代码。Linux内核采用了GPL协议,所以硬件生产商想要支持Linux系统,必须遵照GPL协议公开硬件驱动的源代码。但这些源代码中包含有许多硬件的设计信息,牵涉到硬件生产商的核心利益。而增加了HAL层之后,硬件厂商就不需要开放所有的驱动代码了。
  3. 系统运行库层(libraries):这一层通过一些C/C++库(so库)来为Android系统提供了主要的特性支持。如SQLite库提供了数据库支持,OpenGL ES库提供了3D绘图支持,Webkit库提供了浏览器内核支持等;
  4. 应用框架层(application framework):这一层主要提供构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可通过使用API来构建自己的应用程序;
  5. 应用层(applications):这一层主要用于手机应用的安装,如系统自带联系人、短信等程序,或是第三方应用程序

  以上为五层五区,还有一个区域是存在于libraries层的Android运行时库(Android Runtime),它主要提供一些核心库,能够允许开发者使用Java语言来编写Android应用。另外Android运行时库中还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程中,且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况作了优化处理。

2、拓展

2.1 Dalvik虚拟机

  安卓的应用是由Java编写的,而包括HAL在内的Linux的库都是由C/C++编写的,这个落差由Dalvik虚拟机衔接的。当一个应用运行时,进程空间内将包含一个Dalvik虚拟机。Java程序编译为字节码文件,运行在Dalvik虚拟机中。根据Java代码中的要求,Dalvik通过JNI(Java Native Interface)调用底层的C/C++编写的功能。JNI是从Java中调用C/C++模块的接口。由于上层接口的标准化,字节码可以畅通无阻的跨平台运行。

  Dalvik虚拟机内部是一个“虚拟”进程空间,有自己的栈和堆,管理代码的运行流程。如果这以“虚拟”进程空间不足,Dalvik内建的垃圾回收(garbage collection)机制会自动清空堆上不再使用的对象。自动的垃圾回收简化了程序员的工作,但速度较慢。手动内存管理效率高,但需要更多的编程,且容易犯错。

2.2 JNI

http://www.2cto.com/kf/201502/377185.html

http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html

转自:https://www.cnblogs.com/nathan909/p/5492970.html

最新文章

  1. Error:Execution failed for task ':clean'. > Unable to delete directory :\build\intermediates (转)
  2. Android中activity背景色的设置
  3. using语法糖详解 2015-01-06 17:45 50人阅读 评论(0) 收藏
  4. 用 mCustomScrollbar 滚动条插件实现滚动更新添加数据
  5. MyBaits的各种基本查询方式
  6. <item name="android:windowNoTitle">true</item> 不起作用。标题栏未被隐藏
  7. POJ2103 Jackpot
  8. jQuery.Deferred对象
  9. 多版本号并发控制(MVCC)在分布式系统中的应用
  10. cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
  11. iOS8学习笔记2--autolayout
  12. IPFS家族(二)
  13. python 装饰器 一篇就能讲清楚
  14. 移植Cocos2D到Android平台的原理
  15. Android为TV端助力 外挂字幕(设置颜色,大小,位置,微调字幕)
  16. sci-hub免费下载论文
  17. 1.13flask完结
  18. 171. Excel Sheet Column Number (Math)
  19. 超级账本Hyperledge的关键部件说明
  20. Python学习--Selenium模块学习(2)

热门文章

  1. Python学习之路11☞异常处理
  2. oralce update操作
  3. HZOJ Permutation
  4. Java练习 SDUT-1586_计算组合数
  5. 删除username的索引
  6. Spring IoC 使用详解
  7. @codeforces - 1205D@ Almost All
  8. @bzoj - 4381@ [POI2015] Odwiedziny
  9. NSDate 格式化含有毫秒
  10. uva 11665 Chinese Ink (几何+并查集)