【IT168 技术文档】1:高焕堂讲解Intent-based Programming
Android的4种嫡系组件(即Activity、Service、IntentReceiver和ContentProvider)之间如何互相沟通呢?这4种嫡系组件都是由Android启动的,并不是组件之间透过直接呼叫而启动的。就像我们打手机去车行叫计程车,而不是直接到街道上叫车。我们送给行一个简讯一通电话,表明我们的「意图」(Intent),当车行经理接到此意图,就依据你的意图的内含条件而去挑选最合适的计程车,然后派遣它去接你。
「意图」(Intent)本身是定义为一个类别(Class),一个Intent物件表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作、与动作有关的资料等。 Android则根据此Intent物件之叙述,负责配对,找出相配的组件,然后将Intent物件传递给所找到的组件,Android的媒婆任务就完成了。
因此,Intent物件扮演着媒体仲介的角色,提供「Client组件à Android à Server组件」之间互相沟通的相关资讯,实现了Client组件与Server组件之间『不知而亦能用』之效果,这又称为疏结合(Loosely-coupled)效果。其创造了Server组件抽换的自由度,这又称为PnP(Plug and Play)。
「意图」(Intent)本身是定义为一个类别(Class),一个Intent物件表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作、与动作有关的资料等。 Android则根据此Intent物件之叙述,负责配对,找出相配的组件,然后将Intent物件传递给所找到的组件,Android的媒婆任务就完成了。
因此,Intent物件扮演着媒体仲介的角色,提供「Client组件à Android à Server组件」之间互相沟通的相关资讯,实现了Client组件与Server组件之间『不知而亦能用』之效果,这又称为疏结合(Loosely-coupled)效果。其创造了Server组件抽换的自由度,这又称为PnP(Plug and Play)。

在此图所示的范例里,当我们在一个订单列表画面(如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物件之叙述而执行相应的动作。
(by Misoo团队)
(by Misoo团队)