一、android的系统架构
android的软件层是由下图所示的几个元素组成的,以后的章节中我们详细描述,简单的说就是包含Linux核心,一组支持应用程序框架的C/C++的开发包,运行时管理和应用程序等。
1、Linux 核心。
核心服务(包括硬件驱动,进程和内存管理,安全,网络和电源管理)都是使用linux 2.6的内核管理的。这个内核也提供了一个抽象层,介于硬件和其他层之间。
2、开发包。
在内核层上面运行,android包含一些C/C++的核心库,比如lib和SSL等,也包含以下一些服务:
(1)视频和音频等多媒体开发库。
(2)展示管理层。
(3)图片支持库,包含SGL和支持2D和3D的OpenGL。
(4)SQLite作为原生的数据库支持。
(5)SSL网络安全协议和嵌入的网页浏览器WebKit。
3、android运行时。
android电话不是一个简单的Linux的实现,主要特点就是核心库和Dalvik虚拟机,android运行时是支持你的应用程序运行,与核心库组成应用层的基础部分。
(1)核心库,虽然android的开发是使用java语言,但Dalvik不是java虚拟机,android包提供了大量的在java的核心包里也有的功能,当然也包含了一些android自己定义的开发包。
(2)Dalvik虚拟机 Dalvik是一个基础的虚拟机,它能保证并优化设备可以高效的运行多个实例。它依赖Linux核心提供线程和低级的内存管理。
4、应用框架层。
应用框架层提供了一些类可以建立android的应用程序,它也提供了一些通用的硬件访问和用户界面和应用程序资源管理的一些抽象层。
5、应用层。
所有的应用程序,包括原生的和第三方,都是建立在应用层中,而起都是使用相同的API包,这些应用程序在android的运行时执行,并使用应用框架提供的类和服务支持应用程序的运行。
二、android的核心模块
android应用程序是用什么组成的?
1、实体Activity。
一个实体就是一个应用程序的布局。你的应用程序的用户界面一般是由一个或者多个Activity 类扩展组成的。每一个实体基类的派生类都可以作为你个单独的类执行,你的类将会显示一个由视图和响应时间组成的用户界面。很多应用程序包含大量的界面。
当打开一个新的Activity,前一个界面暂停并且存入历史栈中。用户向后浏览可以代开历史栈中的前一个界面。当它没有必要继续保存时,界面可以选择从历史界面删除。android为每一从桌面启动的应用保存历史记录栈。如果和桌面应用程序比较,Acitivty就像是一个窗口一样。
2、服务Service。
服务是长期存在和运行的,但是不具有界面的组件。有很多这样的例子,比如后台下载,或者媒体播放器从播放列表中播放歌曲。在媒体播放器应用程序中,可能有一个或者多个实体。音乐重放应当被一个实体处理,因为用户希望在切换到其它界面时音乐能够继续播放。后台结束的一些组件比如广播意图(Broadcast Intent)和通知(Notification)都是依赖服务运行的。
3、内容提供器Content provider。
共享和保存数据,内容提供器的功能。应用程序能保存它们的数据到文件中,可以使用SQLite数据库,或者其它的机制保存。一个内容提供器,你可以让你的应用程序数据同其它应用分享数据时。一个内容提供者方是一个类,它执行一套标准的接口,使得其它应用保存和获取它自己处理过的数据。比如我们可以再我们的应用程序中读取联系方式,短信信息等等。
4、意图和意图过滤Intent。
android使用一种称作”意图”的特殊类来描述从一个界面切换到另一个界面,一个意图描述一个应用下一步希望做的事情。意图数据结构最重要的两个元素就使动作和动作使用的数据。动作的典型值有MAIN(实体的入口), VIEW, PICK, EDIT,等等。数据作为URI(统一资源标识符)进行传递。例如:浏览一个人的通信录信息,你可以创建一个带VIEW动作的意图,并且设置URI数据来代表那个人。
还有一个相关的类称作InterFilter。当一个意图是有效请求执行时,一个意图过滤器描述一个实体能够执行的动作。一个能显示某个人通信录信息的实体将公布一个InterFilter,它知道怎样处理视图动作当你保存这些数据时。实体在androidManifest.xml文件中发布它们的InterFilters。
5、广播接收器 Broadcast receivers。
Broadcast receivers只接受广播通知并做出反应的组件。广播通知往往来自系统,比如时区改变,语言改变。继承自BroadcastReceiver基类。一个程序可以有好几个Broadcast receivers来接受它认为重要的通知。
Broadcast receivers没有用户界面,但是可以打开一个activity来对接受到的信息做出反应,或者利用NotificationManager来警告用户。Notifications可以用很多方法来引起用户的注意,一般是在状态栏显示一个图标,以便用户打开信息。
6、桌面交互 Widgets
首先说明,Widget是一种很小的应用程序。在android1.5中加入了AppWidget framework框架之后,开发者可以使用该框架开发Widget。Widget可以拖到用户的桌面并且可以交互,它提供一个full-featured apps预览,可以在桌面指定一个空间来显示应用提供的自定义内容。
每个Widget就是一个BroadcastReceiver,它们用XNL metadata 来描述WIdget细节。AppWidget framework通过Broadcast intents 和Widget通信,Widget更新使用RemotesViews来发送。RemotesViews被包装成一个layout和特定的内容来显示到桌面上
7、通知 Notification
Notification是一种让你的应用程序在不使用Activity的情况下警示用户。Notification由NotificationManger统一管理,目前包含的功能如下:
(1)、创建一个状态条图标。
(2)、在扩展的状态条窗口中显示额外的信息(和启动一个Intent)。
(3)、闪灯或LED。
(4)、电话震动。
(5)、发出听得见的警告声(铃声,保存的声音文件)。
Notification是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。
作为UI部分,Notification对移动设备来说是最适合不过的了。用户可能随时都带着手机在身边,但不会随时都关心它或者程序。一般来说,用户会在后台打开几个程序,但他们不会注意它们,在这样的情形下,当发生需要注意的事件时,能够通知用户是很重要的。Notification可以通过紧急的重复或者(最常用)在状态条使用一个图标来通知用户。状态条图标可以正常的更新或者通过扩展的状态条窗口来显示额外的信息。
通过装配相互依赖的应用程序组件,你可以共享或者交换各个组件的内容信息,比如内容提供器Content provider,服务 Services ,甚至 Activity的信息,都可以与其他的应用程序进行信息的沟通,不管是你自己的应用程序还是第三方的应用程序。