在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构 成”。而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的 Android应用。
在这些组件之间的通讯中,主要是由Intent协助完成的。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根 据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用 。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现 调用者与被调用者之间的解耦。
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity 为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应 的Activity为detailActivity)
为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我 们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到 满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传 入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
一、抽象描述要描述什么
在Android参考文档中,对Intent的定义是执行某操作的一个抽象描述(确实很抽象)。我 们先来看看这里的抽象描述,到底描述了什么。
首先,是要执行的动作(action)的一个简要描述,如VIEW_ACTION(查看)、EDIT_ACTION( 修改)等,Android为我们定义了一套标准动作:
MAIN_ACTION
VIEW_ACTION
EDIT_ACTION
PICK_ACTION
GET_CONTENT_ACTION
DIAL_ACTION
CALL_ACTION
SENDTO_ACTION
ANSWER_ACTION
INSERT_ACTION
DELETE_ACTION
RUN_ACTION
LOGIN_ACTION
CLEAR_CREDENTIALS_ACTION
SYNC_ACTION
PICK_ACTIVITY_ACTION
WEB_SEARCH_ACTION
此外,我们还可以根据应用的需要,定义我们自己的动作, 并可定义相应的Activity来处理我们的自定义动作。
其次,是执行动作要操作的数据(data),Android中采用指向数据的一个URI来表示,如 在联系人应用中,一个指向某联系人的URI可能为:content://contacts/1。
这种URI表示,通过 ContentURI这个类来描述,具体可以参考android.net.ContentURI类 的文档。