Android四大组件简介

我们从“整体”上介绍一下Android的几大组件。就像我们的手机,也是用电池、摄像头、CPU、屏幕,还有一些我们看不见的电路等等组成的 一样,每一个Android应用程序也是通过一个个组件组成的。所不同的时,一个Android可以同时拥有一个或多个组件,也可以没有某一个组件。应用 组件是一个android应用程序的重要基石。每一个组件都作为一个独立的实体存在,起着特定的作用。Adnroid中有四种不同类型的应用组件。每种类 型提供不同的用途,并各自拥有不同的生命周期。Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。

但是正如我们上面所说,并不是每一个Android应用程序都需要这四种组件,某些时候,我们只需要这四种中的几种组合成我们的应用。下面我们对这四个组件进行一些简单的说明,目的是让大家有一个整体的认识,每一个组件我们后面都还会详细的介绍。

Activity

从 字面上理解,Activity是活动的意思。一个Activity通常展现为一个可视化的用户界面,是Android程序与用户交互的窗口,也是 Android组件中最基本也是最复杂的一个组件。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元 素。从内部逻辑来看,Activity需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。对于开发者而言,需 要派生一个Activity的子类,进而进行编码实现各种功能方法。

Service

服务 是运行在后台的一个组件,从某从意义上说,服务就像一个没有界面的Activity。它们在很多Android的概念方面比较接近,封装有一个完整的功能 逻辑实现,接受上层指令,完成相关的事件,定义好需要接受的Intent提供同步和异步的接口。Android中得服务其实与windows中得服务类 似,它执行长时间运行的操作,或运程进程执行工作。服务不提供用户界面,例如在后台下载东西,播放音乐,在你播放音乐的同时还可以干其他事情,而不会阻塞 用于与其他活动的交互。另一个组件,比如Activity可以启动一个服务,并运行或者绑定到它。关于服务我们还可以引申出很多的词汇,比如RPC接口、 AIDL等等,但是这些我们都等到后面的章节去讲解。

Broadcast Receiver

广播接收者,不执行任何任务,广播是一种广泛运用的在应用程序之间传输信息的机制 。 而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件。Broadcast Receiver 不包含任何用户界面。然而它们可以启动一个Activity以响应接受到的信息,或者通过NotificationManager通知 用户。可以通过多种方式使用户知道有新的通知产生:闪动背景灯、震动设备、发出声音等等。通常程序会在状态栏上放置一个持久的图标,用户可以打开这个图标 并读取通知信息。在Android中还有一个很重要的概念就是Intent,如果说Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行 消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其作出反应的机制。

Content Provider

即 内容提供者,作为应用程序之间唯一的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。 Android有一个独特之处就是,在 Android 中,每个应用程序都是用 自己的用户 ID 并在自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常应用程序所影响,每个进程都拥有独立的进程地址 空间和虚拟空间。Android的数据(包括files, database等…)都是属于应用程序自身,其他的应用是不能访问到的,更无法直接进行操作。所以如果你想实现不同应用之间的数据共享,就不得不用 content provider了。为了使其他程序能够操作数据,在Android中,可以通过做成 ContentProvider提供数据操作的接口。其实对应用而言,也可以将底层数据封装成ContentProvider,这样可以有效的屏蔽底层操 作的细节,并且使程序保持良好的扩展性和开放性。Android提供了一些主要数据类型的Content****provider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Content****provider。可以获得这些Content****provider,查询它们包含的数据,当然前提是已获得适当的读取权限。如果我们想公开自己应用程序的数据,可以创建自己的 Content provider 。

一旦需要以上 4 种 Android 应用程序基本组件完成请求, Android 会首先确认该组件所在进程是否运行,如果没有运行, Android 将先启动进程,同时确认被请求组件的实例是否存在,否则将创建一个新的组件实例。

在介绍Broadcast Receiver的时候,我们提到了Intent。其实在Android中,Intent作为**连接组件的纽带,**也是一个重要的“组件”,只是我们很少把它归纳到“组件”这个概念中

以 上 4 种基本组件中,除了 Content Provider 是通过 Content Resolver 激活外,其他 3 种组件 Activity 、 Service 和Broadcast Receiver 都是由 Intent 异步消息激活的。Intent 在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因 此, Intent 是包含具体请求信息的对象。针对不同的组件, Intent 所包含的消息内容有所不同,且不同组件的激活方式也不同, 且不同类型 组件有传递 Intent的不同方式。Intent 是一种运行时绑定( runtime binding )机制,它能够在程序运行的过程中连接两个不同的组件。通过 Intent ,你的程序可以向 Android 表到某种请求或者意愿, Android 会根据意愿的内容选择适当的组件来处理请求。