Service没有用户界面,但它会在后台一直运行。例如,Service可能在用户处理其它事情的时候播放背景音乐,或者从网络上获取数据,或者执行一些运算,并把运算结构提供给Activity展示给用户。每个Service都扩展自类Serivce。
多媒体播放器播放音乐是应用Service的一个非常好的例子。多媒体播放器程序可能含有一个或多个Activity,用户通过这些 Activity选择并播放音乐。然而,音乐回放并不需要一个Activity来处理,因为用户可能会希望音乐一直播放下去,即使退出了播放器去执行其它程序。为了让音乐一直播放,多媒体播放器Activity可能会启动一个Service在后台播放音乐。Android系统会使音乐回放Service一直运行,即使在启动这个Service的Activity退出之后。
应用程序可以连接到一个正在运行中的Service。当连接到一个Service后,可以使用这个Service向外暴露的接口与这个Service进行通信。对于上面提到的播放音乐的Service,这个接口可能允许用户暂停,停止或重新播放音乐。
与activity以及其它组件一样,Service同样运行在应用程序进程的主线程中。所以它们不能阻塞其它组件或用户界面,通常需要为这些Service派生一个线程执行耗时的任务。
4.2.4 内容提供者
在Android中,每个应用程序都是有自己的userID及在自己的进程中执行。这样做的好处是,可以保护系统及应用程序,避免被其他不正常的应用程序所影响。可以把每个进程想像成是一个黑盒子,彼此不会互相影响,连内存的资料都无法共享。如果应用程序之间想要共享数据,就需要使用内容提供者。一个内容提供者就是一个类,它实现了一个标准的方法集合。其他的应用程序可以使用这些方法来保存和检索此内容提供者处理过的数据。
4.3 Intent的详细解析
在一个Android应用中,主要是由四种组件组成的,这四种组件可参考上一节的内容。而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由意图协助完成的。意图负责对应用中一次操作的动作、动作对应的数据、附加数据进行描述,Android则根据此意图的描述,负责找到相应的组件,将意图传递给它,并完成组件的调用。因此,意图在这里起着一个媒体中介的作用,专门提供组件之间互相调用的相关信息,实现调用者与被调用者之间的解耦。
例如,在一个联系人文护的应用中,当在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够调出此联系人的详细信息,为了实现这个目的,listActivity需要构造一个Intent,这个Intent用于告诉系统,要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(intent intent),将构造的Intent传入,系统会根据此intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity。系统会调用找到的Activity,即为detailActivity,最终传入Intent,detailActivitv则会根
据此Intent中的描述,执行相应的操作。
4.3.1 Intent的抽象描述
在Android参考文档中,对意图的定义是执行某操作的一个抽象描述。该抽象描述的具体内容如下:
首先,它是要执行的动作的一个简要描述,如查看、修改等,Android定义了一套标准动作。此外,还可以根据应用的需要,定义自己的动作,并可定义相应的活动来处理自定义的动作。
其次,是执行动作要操作的数据,Android采用指向数据的一个URI方式来实现。
另外,除了动作和数据这两个重要属性外,还有一些附加属性: Android平台下应用程序分组管理软件设计与实现(7):http://www.751com.cn/jisuanji/lunwen_2919.html