热门IT资讯网

Android Intent详解

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,(一)概念:Intent简单来说就是启动或切换Activity, Service或Broadcast三大组件的。Intent使应用程序代码在运行时动态绑定成为可能,大大降低了不同代码之间的耦合性。In

(一)概念:Intent简单来说就是启动或切换Activity, Service或Broadcast三大组件的。Intent使应用程序代码在运行时动态绑定成为可能,大大降低了不同代码之间的耦合性。Intent最常用的方法是用来启动一个Activity。Intent封装了一系列他要执行的动作属性,常见的有Action,Data,Type, Category, Extras。

a: Action, Action属性要完成的只是一个抽象的动作,这个动作具体由哪个组件(Activity或BroadcaseReceiver)来完成,Action这个属性本身并不管。比如:Android提供的标准Action:Intent.ACTION_VIEW,他只表示一个抽象的查看操作,但具体查看什么,启动哪个Activity他并不知道,这取决于Activity的配置,只要Activity的配置中包含了ACTION_VIEW他就有可能被启动, 可以调用Intent的setAction()方法为Intent设置Action属性的值。

b: Data/Type, Dta属性是用于向Action属性提供操作的数据,Data属性接收一个Uri对象,一个Uri对象通常通过如下形式的字符串来表示:

content://com.android.contacts/contacts/1tel:123

而Uri字符串总是满足如下的格式

scheme://host:port/path

Type属性是用于指定Data属性向Action提供的数据的格式,即指定该Data属性所指定的Uri所对应的MIME类型,这种MIME类型可以是任意自定义的MIME类型,只要符合abc/xyz格式的字符串即可。

Data属性与Type属性的关系比较微妙,这两个属性会互相覆盖,比如:

-->如果为Intent先设置Data属性后设置Type属性,那么Data属性将会被Type属性所覆盖。-->如果为Intent先设置Type属性后设置Data属性,那么Type属性则会被Data属性所覆盖。-->要希望二者都同时存在,则应该调用Intent的setDataAndType()方法。

c: Extra,Extra属性相信您应该使用过许多遍了,他用于用于在多个Action之间进行数据的交换(Activity切换时的数据传递intent.putExtra(...)),该属性值应该是一个Bundle对象,Bundle对象类似于一个Map对象可以存入多个key-value键值对。

d: Category, Category属性是用于向Intent提供附加信息的属性,可以是任意的字符串,如果一个Activity中同时设置了Action与Category那么,只有当二者同时满足Activity才会被响应,可通过Intent的addCategory()方法来设置。

说明:一个Intent对象只可以有一个Action但可以设置多个Category属性,如果不指定Category属性,系统会默认初始化一个Category属性,其值为Intent.CATEGORY.DEFAULT常亮(常亮值为android.intent.category.DEFAULT组件)


(二)显式Intent与隐式Intent。

  • 显式Intent通过指定Intent组件名称来实现的,一般使用在知道目标组件名称的前提下,指定需要转向到的Activity,明确指定了要激活的组件,一般使用在应用程序内部。

  • 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间

对比:显式Intent效率更高,因为系统可以直接精准的定位到需要激活的组件,缺点是耦合度高,例如:通过这种方法调用一些系统组件,很容易因为版本的更新,包名,类名,包结构的变化而导致程序崩溃;隐式Intent相对于效率较底下,因为每次意图执行的时候系统都会搜索所有的intentfilter,来查看是否有匹配的内容,所以效率更底下。

0