简介 

本文主要介绍Android的基础知识和体系结构,本文主题:

  • 简介什么是Android,为什么开发者需要关注Android;
  • Android体系结构(如Linux Kernel, Libraries, Android Runtime, Application Framework, Applications)和构建Android应用的主要组件(Activities, Services, Broadcast Receivers, Content Providers);
  • 扩展:Intent和Fragement;

背景

  • 最好对JAVA开发有所了解;
  • Android开发环境;(另一翻译文章)

Android简介

Android是基于linux内核为智能手机和平板设计的操作系统。Android最初是由Andy Robin在二十一世纪初创建,后被Google收购,并在2005年被命名Android。Android被“开放手机联盟”所属,由Google维护。

Android最大的优势是其开源,目前有大量的设备支持Android系统,而且已经构造了Android生态系统。

第一款Android手机G1是由HTC生产,Google的android团队在同期也发布了Android SDK 1.0版本。Android版本历史:

 Android和其他移动平台

下图是Android系统和其他移动平台的简介:

下面是些为什么选择Android的原因(译者没有好的词汇,此处保留原词汇):

  • Multiple devices 
  • Screen size
  • Widgets
  • Changeable keyboard
  • Deep cross-app integration
  • Better User Interface
  • Cloud-connected experience
  • Price points
  • Customization
  • Live wallpapers
  • Custom launchers
  • Custom ROMs
  • Speed of improvement

为什么开发者需要关心Android系统或应用的开发?

Android成长的非常迅速,由于Android开源,开发者可以深入了解android相关API的设计和使用,并有机会为android社区做贡献。

同时开发者也可使用开源的工具来构建Android应用程序;当前,Android系统已经广泛应用于手机,平板电脑,电视,手表和汽车等领域;因此,这对于开发者来说,Android有一个宽广的市场。

Android体系结构

 Linux Kernel

 Android系统在底层是依赖于Linux 2.6内核来进行安全管理、内存管理、进程管理、网络管理和驱动模型管理。Linux Kernel层由各种驱动组成,如摄像头,WiFi和视频等。

尽管Android底层使用Linux Kernel,但也不是完全使用,Android也针对性的在原有内核基础上进行了一些封装或修改。

Android Libraries

以下是Android Libraries层封装的主要模块:

  • FreeType - 一个高质量的字体引擎,支持位图和向量格式;
  • SGL - 2D图形渲染引擎的核心库;
  • Libc - 基于Linux 嵌入式开发优化过的C标准库;
  • SQLite - 轻量级的关系数据库;
  • SSL - 网络通信的安全协议;
  • OpenGL ES - 3D图形渲染引擎;
  • WebKit - 浏览器内核; 

以下是Android设备提供的核心API包:

  • android.view - 包含核心的用户界面接口的视图包(view package);
  • android.widget - 所有的widget都是基于view package进行封装的,提供统一的UI元素如按钮,列表等可供开发者重复使用;
  • android.os - 由操作系统包(operating system package)组成,主要用来调试应用程序、跟踪应用、消息机器、控制设备的电源状态和提供管理系统进程的工具等;
  • android.util - android的工具包(util package)主要由一些基础的工具类组成,如:字符串格式,读写josn数据,XML解析,时间处理和事件日志(event log)的读取等;
  • android.graphics - android图形接口由一些基础的图形类组成,如:canvas, colors, drawing primitives等;
  • android.text - android text包主要包含用来出来文本的工具;
  • android.database - 主要包含一些数据库的工具类;SQLite是android默认使用的数据库,android使用SQLite来存储一些私有数据;此包也包含一些出来content provider的工具类;
  • android.content - android content由一些在设备上读取和发布数据的类组成;同时也提供一些资源管理,content share和包管理(package management)的服务;
  • com.google.android.maps - 提供google maps的控件和API;
  • android.app - 提供读取Application Model;主要包含Activities和Service APIs;
  • android.provider - 提供访问标准content provider,如:日历,媒体和联系人等;可以使用provider package提供的一些类来从conteng provider里添加或移除预定义的数据;
  • android.telephony - Telephony APIs主要提供管理电话通讯的一些API,如:打电话,管理电话状态和发信息等;
  • android.webkit - 提供Web相关的一些APIs。比如WebView 控件可以在activity里面嵌入浏览器和cookie管理;
  • android.security - 处理安全子系统;
  • android.network - 处理网络访问;

 Android Runtime

 Android应用程序及其Application Framework几乎都是使用JAVA来开发的。不同于JVM虚拟机,Android使用的是另一运行时虚拟机Dalvik。

Dalvik和JVM关键区别在于Dalvik是基于寄存器(register)的,而JVM是基于堆栈(statck)的;Dalvik是为了在小内存和低CPU设备上运行而设计,同时也考虑多个应用程序同时运行时的效率;

(注意: Dalvik使用底层的linux kernel来管理内存和线程)

 在Android 4.4中,引入了新的虚拟机ART(android run time),ART在APP安装的时候把APP编译成本地代码(native code)。ART可以大幅的提高程序的运行效率,因为不需要APP在每次运行时JIT做just in time compilation。

(注意: 使用ART在安装的时候耗时比Dalvik要长,但其带来的好处是显而易见的)

ART的主要特色:

  •  提前编译(Ahead of Time (AOT) compilation),新的运行时ART引入了新的编译机制,在程序安装的时候将程序翻译成本地代码,这可以大幅的提高程序的运行效率,因为没有必要在每次APP运行时做Just in Time Compilation;但在安装的时候会很耗时,不过,这也仅此一次;ART使用dex2oat工具在设备上编译应用程序,dex2oat接收.dex作为输入, 编译生成机器可执行的代码。
  • 改进了垃圾回收机制(garbage collection),Dalvik在垃圾回收的时候有两次暂停并且耗时10毫秒;ART有一次暂停并且耗时只需2毫秒;ART中Full GC也是在手机锁屏之后再进行的;ART使用了全新的memory allocator: Rosalloc.

 Application Framework

 Application Framework提供了各种开发Android App的APIs。这一层有很多文档可以去了解,而且推荐开发者去深入了解,这样,才容易创建出很多有创新性的和很好的应用。

Android提供了一个开发的开发环境,开发者可以免费使用这些APIs,比如后台运行服务,通知,读取位置信息等。

  • Activity Manager - 是一个非常重要的组件,用来管理应用程序的生命周期;
  • Content Provider - 管理不同应用间的数据共享;
  • Location Manager - 管理位置信息,GPS和手机基站;
  • Package Manager - 持续跟踪已安装的应用程序;
  • Telephony Manager - 管理设备上的手机通讯服务;
  • Resource Manager - 管理应用程序使用各种资源;
  • Notification Manager - 管理在状态栏上显示自定义的提示信息;

Applications

 Applications是android体系结构最顶层的一层,我们所开发的应用程序大都是在这一层,而且是使用JAVA开发;下面是这层默认有的一些层序:

  • Web Browser
  • SMS Client
  • Dialer
  • Contact Manager

 

PS:花了大半天的时间,断断续续才翻译了这么多。原文实在是有点长,这里先到此为止,后面再续一篇。

 

备注: 

1. 本文在翻译过程中有所删减;

2. 关键词汇没有翻译,以免混淆理解;

3. 原文:http://www.codeproject.com/Articles/802449/Article

本文版本历史:

初始版  2014.08.31

更多相关文章

  1. Android(安卓)RadioGroup和RadioButton使用
  2. Android使用XPush配置极光推送
  3. Android深入理解Context–Context使用的误区
  4. Android(安卓)神兵利器Dagger2使用详解(三)MVP架构下的使用
  5. 【Android游戏开发二十一】Android(安卓)os设备谎言分辨率的解决
  6. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
  7. 享受Android应用程序的Java技术盛宴
  8. Android学习笔记(二三): 多页显示-Flipper的使用
  9. 第一天

随机推荐

  1. Cannot add extension with name 'androi
  2. View有关基础
  3. 指纹支付相关的细节处理
  4. Android(安卓)APK反编译详解(附图)
  5. Android(安卓)如何让EditText不自动获取
  6. Android(安卓)错误 'roundIcon' in packa
  7. android webservices sax 传输并解析xml
  8. 【转】Android字体小结
  9. 通过WifiManager,DhcpInfo获取android IP
  10. Android单元测试