Android是什么?
Android是一个面向移动设备的软件堆层( software stack),包含了一个操做系统,中间件和关键的应用程序。 Android SDK提供了必要的工具和API,你能够在这些的基础上使用java编程语言开发 Android平台上的应用程序。
特性
应用程序框架 支持组件的复用和更换
Dalvik虚拟机 专门为移动设备进行过优化
集成的浏览器 基于开源的 WebKit 引擎
优化的图形机制 自定义的2D图形库,基于OpenGLES 1.0 规范的3D图形实现(本项硬件加速器可选SQLite 轻量级的数据库,支持结构化数据的存储媒体支持 面向常见的音频、视频以及静态图形档案格式 (MPEG4H.264,MP3,AAC,AMR,JPG,PNG,GIF)
GSM 技术 (依赖硬件支持 )
Bluetooth , EDGE , 3G,和 WiFi (依赖硬件支持 )
Camera, GPS, compass,和 accelerometer (依赖硬件支持 )
丰富的开发环境包含一套硬件仿真器,一些用于程序调试、内存和性能剖析的工具,以及支持Eclipse集成开发环境的插件(ADT)。
Android 框架
应用
Android 将预装一组核心应用程序,包括 email 客户端、短信服务、日历日程、地图服务、浏览器、联系人和其余应用程序。全部应用程序都是 Java编程语言编写的。
应用框架
经过提供一个开放的开发平台,开发者使用 Android 能够开发出极为丰富且新颖的应用程序。开发者能够自由地利用设备硬件优点、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等。
开发者拥有对核心应用程序所使用的相同框架 API 的彻底访问权力。应用程序框架的设计
旨在简化组件的复用;全部应用程序均可以发布其能力。任何应用程序均可以发布本身的功能,而后其余任何应用程序均可以使用这些功能 (须要符合框架强制要求的安全约束 )。这一相同的机制容许用户替换组件。
全部应用都是一组系统和服务,通常包含:
一组丰富和可扩展的,能够用来构建应用程序的 视图 组件,含有 lists, grids , text
boxes, buttons,甚至内嵌网络浏览器
Content Providers (内容提供器) 使一个应用程序能够访问另一个应用程序的数据 (如联系人),或者应用程序内部共享自有数据
Resource Manager (资源管理器),提供对本地化字符串、图形和布局文件等非代码资源的访问通道
Notification Manager (通知管理器),使全部的应用程序在状态栏显示自定义的警告
通知
Activity Manager (活动管理器)负责管理应用程序的生命周期,提供通用导航回退
库
Android 包含一组各类各样的 Android 系统组件都在使用的 C/C++ 库。这些功能经过 Android应用程序框架提供给开发者。下面列举一些核心库:
系统 C 库—— 基于 BSD 的标准 C 系统库(libc )实现,移植到了 Linux 嵌入式设备上
媒体库 —— 基于 PacketVideo 的 OpenCORE;媒体库支持不少流行音频和视频格式、静
态图形文件(包括 MPEG4, H。 264, MP3, AAC , AMR , JPG 和 PNG)的播放和录制
表面管理器 —— 管理对显示子系统访问,无缝组合多个应用程序的二维和三维图形层
LibWebCore —— 是流行的浏览器引擎,能够支持 Android 浏览器和嵌入式的网页视图
SGL—— 底层的 2D 图形引擎
3D 库—— 基于 OpenGL ES 1.0 API 的实现;该类库使用硬件 3D 加速器(有相应硬件时)或者内置的、高度优化的 3D 软件加速机制。
FreeType—— 支持位图和矢量字体渲染
SQLite—— 面向全部应用的,强大且轻量级的关系型数据库引擎java
Android 运行时刻 (Android Runtime)
Android 的核心类库提供 Java类库所提供的绝大部分功能。每一个Android应用程序都经过Dalvik虚拟机在本身的进程中运行。Dalvik 被设计来使一台设备有效地运行多个虚拟机。 Dalvik 虚拟机执行的是 Dalvik 格式的可执行文件(.dex) ——
该格式通过优化,以下降内存耗用到最低。虚拟机是基于寄存器,运行 Java 编译器编译的类,这些类经过 Android 内置的 “dx工具编译成了。 ” dex 格式。
在一些底层功能,好比线程和低内存管理方面, Dalvik 虚拟机是依赖 Linux 内核的。
Android 应用程序基础
Android 应用程序是用 java 语言写的,经过 aapt 工具把编译好的 java 代码和应用程序所须要的全部数据、资源文件打包成 Android 包,即后缀为 .apk 的压缩文件,这个文件是发布应用程序和在移动设备上安装应用程序的媒介,是用户下载到他们设备上的文件。一个 .apk文件中的全部代码同属于一个应用程序。从不少方面来讲,每一个 android 应用程序都运行在本身的空间里:默认每一个应用程序在本身的 Linux 进程中运行,当应用程序中的任何代码须要执行时android 就启动一个的进程,当再也不须要或系统资源被其余应用程序请求时 android 就关闭这个进程。每一个进程都有其专属的 Java 虚拟机(VM ) ,因此应用程序代码运行时与其余的应用程序是彼此隔离的。默认的,每一个应用被赋予一个惟一的 Linux 用户 ID,因为权限设置的缘由,一个应用程序的文件只有本用户 (应用程序自己) 可见 —— 固然,也有把他们导出给其余应用程
序的机制。能够为两个应用程序安排使用同一个用户 ID ,这种状况下他们彼此之间是能够看见对方的文件。为了节约系统资源,拥有相同 ID 的应用也能被安排运行在一个相同的 Linux 进程中,共享同一个虚拟机。
应用程序组件 (Application Components)
Android 一个核心特色就是一个应用程序能使用另外一个应用程序的元素(在提供元素的
应用程序容许的状况下) 。例如,若是你的应用程序想要显示一个滑动图片列表,另外一个应
用程序正巧开发了合适的滑动模块,而且赞成共享,你就能够调用那个滑屏模块处理这些
图片并显示出来,而不是本身再去开发一个。你的应用程序并无包含或连接了提供元素
的应用程序的代码,只是在须要的时候启动使用其余程序的部分功能。
为了实现这样的过程,系统必须在应用程序的任何部分被请求时启动这个程序的进程,
实例化那部分 Java 对象。所以,和其余大多数系统不一样的是, android 应用程序没有一个单
独的程序入口 (例如:没有 main 函数) 。 而是包含运行所需的必要组件, 使得系统能够实例
化对象。 android 中有四种组件:
活动 ( Activity)
一个 Activity 表示用户可视化界面,用户能够在上面进行一些操做。例如,活动会显示一个用户可选的菜单项的列表,或是显示带有标题的图片。一个文本信息应用程序可能有一个活动来显示将要发送信息的联系人对象,一个活动用于显示撰写信息文本给选定的联系人,其它的活动用于查看旧的消息或者显示设置的界面。虽然它们做为一个总体的用户界面进行协同工做,可是每个活动都是相对独立的。每个活动都是活动基类(类 Activity )的一个子类实现。
一个 Android 应用可能由一个活动组成,或者像上面提到的文本信息应用程序同样包含了多个活动。活动是什么样的以及须要多少的活动,这些取决于你的应用程序是如何设计的。最典型的是将一个活动被标记为第一个,当应用被加载时显示给用户。从
一个活动转到另外一个活动是经过在当前活动来运行下一个活动实现的。每一个活动提供了一个用于绘制的默认窗口。一般窗口将占满整个屏幕,可是也有可能比屏幕小而且浮在另外一个窗口的上面。一个活动可使用多个窗口——例如,在活动中央显示一个须要用户回应的弹出对话框,或者当用户选择屏幕上一个特定项目时为用户显示一些重要信息的窗口。窗口中的可见的内容是由一组继承自 View 基类的 view 组成的层次体系。每一个 view 控制窗口中一块特定的矩形区域,父 view 包含并组织子 view 的布局。叶 view (层次底端的 view)绘制它们管理的矩形,而且负责响应用户在此区域的操做,所以 view 就是活动和用户交互的地方。例如,一个 view 显示一个小图片,当用户点击这个图片后开始一个操做。 Android 有不少已经作好view 你能够选择使用,包括按钮,文本输入框,滚动条,菜单项,多选列表等等。经过使用 Activity.setContentView() 方法将一组 view 层放置到一个活动窗口中, contentview 是 view 层中最顶端的那个 view。(参见 User Interface 的文档获取更多有关 view和层次的信息。)
服务 (Services)
服务没有可见的用户界面,可是能够在后台运行任意长的时间。例如,一个服务能够在用户转向其余工做后仍然在后台播放音乐,或者从网上下载数据,或者计算一些东西而后在须要的时候提供给活动。每一个服务都继承自 Service 基类。一个主要的例子就是从列表中播放音乐的媒体播放器。播放器程序可能会有一个或几个活动,这些活动可让用户选择但愿播放的音乐而后显示播放。可是音乐播放过程自己不会使用一个活动,由于用户但愿在切出播放器界面作别的事情时音乐也能一直放下去。为了保持播放继续,播放器的活动能够启动一个在后台运行的服务。而后即便启动这个服务的活动退出,音乐播放服务也能继续运行。
你能够链接( connect)或者绑定( bind)到一个正在运行的服务(若是这个服务还没运行的话就启动它) 。当链接到服务后,你能够经过服务暴露出来的接口和这个服务进行通讯,对音乐播放服务来讲,这个接口可能容许用户暂停,后退,中止,从新播放等操做。像活动和其余组件同样,服务运行在这个应用程序进程的主线程中。 所以为了避免阻塞其余的组件或者用户界面,服务常常为那些耗时长的任务单独开一个线程 (好比音乐播放 )。
广播接收器 (Broadcast receivers)
广播接收器只是接收广播并对广播信息作出做出反应,多数的广播是由系统代码发出的—— -好比反应时区变化的通知,电量低的通知,照了一张照片的通知,或者用户修改了系统语言的通知。应用程序也能够本身定义广播,好比定义这样一个广播,让其余的应用程序知道某些数据已经下载完毕了可使用了。应用程序能够有任意数量的广播接收器来对他所关心的广播进行监听并做出反应。全部的广播接收器都继承自 BroadcastReceiver 基类。广播接收器不显示在用户界面上,可是能够启动一个活动来对接收到的信息进行响应,或者可使用 BroadcastReceiver 来警告用户。 Notifications( 通知 )能够经过不一样的方式引发用户的注意,好比使背景灯闪烁,使设备振动,播放声音等等。一般是在状态栏上显示一个不会消失的图标,用户能够打开这个图标查看通知。
内容提供者 (Content providers)
内容提供者使程序中特定的数据能够被其余程序使用。这些数据能够存储在文件系统中,SQLite 数据库中,或者任何其余能够存数据的地方。内容提供者继承自 ContentProvider基类,实现了一系列的使其余程序获取和存储其支持的数据格式的方法,可是应用程序不直接调用这些方法。而是使用一个 ContentResolver 对象,而后调用这个对象的方法。ContentResolver 能够和任何的内容提供者交流,它和提供者协做来管理全部涉及到的进程间的通讯。获取更多使用内容提供者的详细信息请参见另外一篇文档—— Content Providers 。不管什么时候请求都应该由一个特定的组件来处理, Android 将确认组件的应用程序进程是否处于运行状态,并在须要的时候启动它,以及组件的一个特定实例是否可得,并在须要的时
候生成该实例.android