高焕堂讲解之 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对象之叙述而执行相应的动作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架