上一讲我们对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提供了一些主要数据类型的Contentprovider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Contentprovider。可以获得这些Contentprovider,查询它们包含的数据,当然前提是已获得适当的读取权限。如果我们想公开自己应用程序的数据,可以创建自己的Contentprovider

一旦需要以上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会根据意愿的内容选择适当的组件来处理请求。

这两节我们都是从理论上对Android有了一个整体的认识,是不是觉得枯燥乏味呢?接下来我们就开始动手搭建Android的开发环境。

更多相关文章

  1. Android文档(三)-数据存储
  2. Android简介
  3. Android(安卓)root权限获取大揭秘
  4. Android学习札记49:在Android中使用Application保存全局变量
  5. Android数字签名的创建
  6. Android中SQLite应用详解
  7. android中Intent传值与Bundle传值详解
  8. Android报表解决方案 使用开源组件iChartjs(一)
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android之Retrofit实现Log日志输出
  2. Android拍照调用系统相册仿微信封装总结,
  3. Android(安卓)菜单(OptionMenu)大全 建立
  4. Android(安卓)的一些命令(补充中..)
  5. Android(安卓)setWallpaper()设置壁纸
  6. 6.9 Android(安卓)支付宝 开发者平台申请
  7. OPhone开发环境设置备忘录
  8. Android版本更新下载apk自动安装的方法
  9. LeakCanary2.3 核心原理浅析
  10. Android学习(一)(初学)SharedPreferences