Android应用程序组件深入剖析

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用。这里有6个组件,它们是Android应用程序的基石:

Activitiy(活动)

应用程序的显示层。Activity就是一个用户可视化,可交互的界面。 其特点如下:
  • 应用程序可以有1..N个Activity,每个Activity彼此独立,都是Activity类的扩展;
  • 通常,有一个Activity被应用程标记为启动后的第一个Activity;
  • Activity默认会被赋予一个可绘制的窗口,通常默认窗口填充整个屏幕;
  • Activity使用Views去构建UI来显示信息和响应用户的行为。
窗口的可视内容由多层Views(从View基类派生的对象)提供,窗口内的每个视图控件是一个特定的矩形空间。父视图包含并组织他们子视图的布局。叶子视图(在层次结构的底部)在绘制的矩形空间中控制和响应用户操作。这样,用户能过Activity的视图发出Intent请求。 一个视图层次结构通过Activity.setContentView()方法被放置在Activity的窗口中。内容视图是View层次结构的根对象。

 

Service(服务)

Service是一个用户不可见,无时间限制运行在后台的服务。它负责更新的数据源和可见的Activity,以及触发通知。 其特点如下:
  • 所有Service都是基类Service的子类实现;
  • 常用来执行一些需要持续运行的处理;
  • 可以连接(绑定)其他持续运行的服务(如果它尚未运行,并启动该服务),通过服务公开的接口与服务进行通信。
Service像Activity和其他组件一样,在应用程序的主线程中运行。为了不阻塞其他组件或用户界面,他们常常产生另一个线程来处理耗时的任务。

 

Broadcast receivers(广播接收器)

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。 Broadcast receiver不显示用户界面。然而,他们可能会启动一个Activity来响应收到的信息,或使用NotificationManager来提醒用户。通知可以以各种方式得到了用户的注意 - 背光灯闪烁,振动设备,播放声音,等等。他们通常放置在状态栏,用户可以打开状态栏中特定的图标来得到的消息。

 

Content providers(内容提供器)

提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。 这些数据可以存储在文件系统中,在一个SQLite数据库,或以任何其他可识别的方式。ContentProvider派生自ContentProvider基类,它使用其他应用程序去检索和存储其可控类型的数据的方法来执行标准设置,然而,应用程序不直接调用这些方法。相反,他们使用ContentResolver对象,并调用它的方法。一个ContentResolver可以和任何ContentProvider交互,它与Provider协作来管理任何进程间通信。

 

Intents(意图)

简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。

 

Notifications(通知)

用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你。


Android的一个主要特点是,一个应用程序可以使用其他应用程序(这些应用程序许可证)的元素。例如Content Provider或Service——你的和其他的都是第三方的。

对于这项工作,该系统必须能够在启动应用程序时处理它需要的任何部分,并将那部分实例化成Java对象。因此,不同于多数其他系统上的应用程序,Android应用程序没有一个单一的入口点来处理应用程序中的所有内容(例如没有main()函数)。其中上面提到的组件是应用程序可以实例化和运行需要的重要组成部分。

 

 

参考资料: http://developer.51cto.com/art/201001/180361.htm

http://developer.android.com/guide/topics/fundamentals.html

posted @ 2011-11-20 15:34  残夜  阅读(430)  评论(0编辑  收藏  举报