6.1 Android系统的信使:Intent

Android系统从诞生之初就不允许直接访问4大应用程序组件如果读者继续阅读本书后面的章节,会逐渐体会到为什么安迪-鲁宾(Andy Rubin,Android之父)要这么设计。(Activity、Service、Broadcast Receiver和Content Provider),这就需要提供一种机制可以访问这些组件,这也是Intent诞生的根本原因。

Intent对象被应用于4大应用程序组件中的3个(Activity、Service和Broadcast Receiver),而Content Provider会采用其他方式访问(在后面的章节会详细介绍)。例如,对于窗口(Activity)来说,尽管无法直接访问窗口实例,但可以调用startActivity方法显示窗口。为了可以更灵活地控制窗口,以及向窗口传递数据,就需要一种技术来完成这些工作,这就是Intent对象的核心功能,所以说Intent对象从本质上来说就相当于一个信使,用于保存和传输各种数据。

服务(Service)和广播(Broadcast)的使用方法和窗口(Activity)类似,Intent对象也用来完成类似的工作。

下面的代码用于开始服务和发送广播,其中都使用到了Intent对象。关于服务和广播的细节会在后面的章节讨论。

// MyService是服务类

Intent serviceIntent = new Intent(this, MyService.class);

// 开始服务

startService(serviceIntent);

 

// mybroadcast是广播字符串

Intent broadcastIntent = new Intent("mybroadcast");

// 向系统发送一条广播

sendBroadcast(broadcastIntent);

从上面的代码可以看出,开始服务、发送广播和显示窗口的代码风格是相同的,都需要创建一个Intent对象,并指定相关的信息(服务指定具体的服务类;广播指定一个字符串,被称为Broadcast Action)。