Intent对象的作用和构成

本文详细介绍了Android中Intent对象的作用及构成,包括Action、Data、Type、Category、Component和Extras等项,以及IntentFilter对象的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent对象的作用和构成

在Android中是利用Intent对象建立连接并实现组件通信的,这个就是Android中的意图机制

在意图机制中,利用组件管理服务来管理连接的组件,组件管理服务通过组件的配置信息了解组件的功能和类别,从而帮助调用组件找到符合需求的实现组件,调用组件和实现组件彻底的解耦




Intent对象的作用


Intent对象是组件间连接的信息载体,组件管理服务把调用组件传递来的Intent对象序列化给实现组件,Intent对象可以设置一些数据项来描述其意图,组件管理服务根据这些数据项来寻找匹配的实现组件和如何构造实现组件

Intent对象的构成解析


Action项

用来表达Intent要执行的动作,可以通过Intent.setAction来设置,Intent.getAction来获取,Action项遵循Java的包命名规范,比如:com.sample.action.ACTION_EAT,当然这不是必须要这样。Android中有许多已经定义好的动作,比如我们经常用到的Intent.ACTION_VIEW

Data项

Action项定义了"做",而Data项定义了要做"什么",比如当我们需要借助图片浏览器组件浏览一张图片时,我们就需要将图片的地址信息放在Data项中,可以通过Intent.setData来设置,Intent.getData来获取,Data项的数据格式要符合URI标准

Type项

Data项定义了要做"什么",而Type项定义要"做"的哪一种"类别"信息,比如说我们希望调用视频播放组件来播放一段视频,Action项是Intent.ACTION_VIEW,Data项是一个URI(视频地址),如果仅有这些信息的话,就有可能调用到图片浏览器组件来播放视频,这样显然是不行的,这个时候我们就可以通过设置Type项说明我需要的是能播放视频类型的组件。由于Data项和Type项是互斥的存在,单独设置其中一项的话另外一项不会起作用,这个时候我们可以通过Intent.setDataAndType来设置

Category项

我们可能需要在满足某一条件的基础上去做一件事,Category项描述了意图的约束条件,Intent.addCategory来设置,Category可以有多个,也就是说你要满足几个条件的前提下才能去做这件事。我们经常需要从一个应用中启动另外一个应用,如果我们希望从另外一个应用的入口程序去启动时,就需要添加Intent.CATEGORY_LAUNCHER约束条件。

Component项

当我们不需要设置Action、Data、Type等项来寻找匹配的组件时,我们可以直接通过设置Component项,直接定位(类全名),这种方式一般用于应用内部组件间的连接

Extras项

Intent中数据传输的载体,通过键值对来存储数据,实现组件可以通过键来取得键值

Flags项

Flags项可以用来指定组件管理服务怎么去构建实现组件,是在新的任务栈中构建,还是在原有的任务栈中构建,常用于改变实现组件的任务模型和进程模型

 intent.addFlags(Intent. FLAG_ACTIVITY_NEW_TASK ); //在新的任务栈构建实现组件
 intent.addFlags(Intent. FLAG_ACTIVITY_CLEAR_TOP );//清除当前任务栈顶端的组件


Intent对象的各个数据项并不是单独使用的,它们往往彼此合作彼此约束,共同构成组件间通信协议

Intent对象可以分为两类:一类是精确描述了实现组件的Intent,一类是模糊描述了实现组件的Intent,精确描述了实现组件的Intent需要明确的知道实现组件(耦合),模糊描述了实现组件的Intent则需要组件管理服务进行组件的匹配查找(完全解耦)

Intent Filter对象


Intent Filter对象于Intent对象的数据项一一对应,Intent Filter用来描述组件实现的功能,组件实现的功能既可以通过Intent Filter对象来动态设置,也可以在配置文件中配置
设置Intent Filter对象需要注意几点:1、Action项可以设置多个,并且它们之间是或的关系,也就是说只要满足一个动作就可以接受Intent对象的请求。2、Category项也可以设置多个,也就是说只用满足其中的一个约束,就可以接受Intent对象的请求。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值