高焕堂讲解之 Intent-based Programming

最近在看台湾高人--高焕堂的android讲义。在此,自己做个记录。

内容大部分来自讲义,不是原创。自己打一遍,也算是加深下理解。

----------------------------------------------------------

Intent-based Programming:

Android 有4中嫡系组件:Activity 、ContentProvider 、 IntentRecevier  、 Service。

那么什么又叫做嫡系组件呢?上面四位是Android的一等公民,他们都必须在AndroidManifest.xml档案里声明。

在eclipse里我们通过提示可以得到下面这张图片。那么我们可以清楚的找到这四位一定公民。

这让android知道我们在这里定义了多少嫡系组件类别;android可以在启动时将他们执行起来,成为共享(Shared)的服务组件。

这些嫡系服务组件间的沟通,通常是透过「意图」(Intent)对象来请Android转达给对方,Android则会依据意图而找出最佳的配对。配对成功,就展开相互的沟通与服务了。

[意图](Intent)本身定义为一个类别(Class),一个Intent表达一个期望和目的叙述其所期望的服务或动作、与动作有关的数据等。Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将 Intent对象传递给所找到的组件,Android的媒婆任务就完成了。

 

因此,Intent对象扮演着媒体中介的角色,提供「Client组件 -->Android --> Server组件」之间互相沟通的相关信息,实现了Client组件与Server组件之间『不知而亦能用』之效果,这又称为疏结合(Loosely-coupled)效果。其创造了Server组件抽换的自由度,这又称为PnP(Plug and Play)

 

兹以下图为例,Activity主要是提供UI画面来与User进行互动,两个Activity之间的直接互动较少。其它如ContentProvider则常是为Activity等提供服务的。所以Activity发出Intent对象委托Android挑选到适当的ContentProvider对象(并且将Intent对象传递给ContentProvider对象)之后,通常会透过ContentProvider接口而呼叫ContentProvider的各项服务或功能。

 

 

在此图所示的范例里,当我们在一个订单列表画面(Activity-1),点选某个订单之后,希望能够呈现出此订单的采购细项画面(Activity-2)。此时,Activity-1需要发出一个 Intent对象,这个Intent对象说明了意图:包括查找”(Get)动作、订单ID等数据,然后呼叫Activity父类别的startActivity (Intent intent)函数,将此Intent对象传送给Android。而Android会根据此Intent对象中的叙述,与AndroidManifest.xml所叙述的各嫡系类别之条件相比较,找出与此Intent叙述相配的组件(Activity-2),然后Android将该Intent对象递交给它,于是Activity-2会根据此Intent对象之叙述而执行相应的动作。

 

posted @ 2012-01-05 17:30  HuaDeFei  阅读(1406)  评论(0编辑  收藏  举报