Intent对象若干数据项的含义总结
Intent作为组件之间通信的手段和协议,包含了诸如Action、Data、Type、Category、Component、Extras和Flags等数据项,各自拥有各自的含义和作用。当调用组件发出一个intent的时候,组件管理器会根据所设置的这些数据项来评判应该创建和启动哪个或者哪些被调用组件。
总结如下:
Action
作为通信的动作的主题,相当于一句话主谓宾中的谓语(主语即调动组件自己)。比如“我要某人打开一张图片”,Action即“打开”的意思。Action的名字遵从java的包名定义的方式从而保证了唯一性,比如com.company.sample.action.ACTION_OPEN。
标准的Action比如Intent.ACTION_SEND,Intent.ACTION_VIEW等
Data
表达了动作所带有的操作目标,相当于“我要某人打开一张图片”中的一张图片的意思,即宾语。表示这个动作所附带的主体数据是什么。通过Intent.setData或者Intent.setDataAndType来设置,为字符串格式,格式通常用URI来表示。一个URI通常带有scheme、host、port、path等字段。比如一个表示本地的一个文件的data大致为:
file:///sdcard/file.txt
或者是请求一个web的URI:
http://www.baidu.com/main/1
Type
描述了操作目标的类型需求,通常和Data字段的设置是互斥的,即若设置了Type则前头设置的Data会被清掉。一般来说Data用于特指的数据,Type用于泛指的数据。
比如ACTION_SEND这个action要发送一个图片时,应该用Intent.setType来设置万类型为"image/jgp"表示被调用组件是能够打开图片类型的,但是实际上被调用组件可以有多个,当有多个的时候则会出现组件选择框。
而ACTION_SENDTO这个action通常已经制定了调用组件,所以通常用setData来设置操作目标。
有时候Data和Type是相铺相成的需要同时设置,比如打开一张图片,即需要说明type类型,又要给出图片文件的位置,那么这个时候需要用intent.setDataAndType("file:///sdcard/img.data","image/jpg")
Category
表述了一个附件条件,如果说“我要某人打开一张图片”是有条件的,条件是这个某人是个大学生,那么“大学生”就是这个category。
系统默认的几个category中最常见的就是Intent.CATEGORY_LAUNCHER了,每一个app的入口activity在manifest中都要加入Intent.CATEGORY_LAUNCHER这个category的描述。事实上是为了让homescreen程序在点击这个app的时候能够找到这个入口activity。所以说Homescreen程序发出来intent给这个所被点击的app的时候加上Intent.CATEGORY_LAUNCHER的category,意图是想进入这个app的入口组件,所以加入了Intent.CATEGORY_LAUNCHER的组件就会被启动
Component
Intent启动组件分类显式(explicit)和隐式(implicit),若给intent设置了component,即Intent.setComponent(或者是setClass)那么表示这个intent已经设置好了要启动哪个组件了,这个时候组件管理器只要老老实实的按照所设置的来启动和创建组件即可。这个时候intent则变成了单纯的信息载体,传递数据给被调用组件使用
Extras
即给intent附带的数据。负责将数据从调用组件传递到被调用组件。数据内容是一个android.os.Bundle类型,按照键值对方式存储,它继承了android.os.Parcelable接口,即可序列化和反序列化,这样子既可以在进程间通讯中用来传递。通过intent.setExtras来加入数据,用intent.getExtras来获取数据。android默认的extras类型中大多是和Action相关联的。比如:
ACTION_SEND中用intent.EXTRA_TEXT来保存要发送的文本内容,intent.EXTRA_SUBJECT用来添加内容的主题。
Flags
一些标志位,通常和任务模型和进程模型相关,有的适合安全机制相关,比如FLAG_GRANT_READ_URI_PERMISSION用来给被调用者一次性的免permission的获取数据的权限。
FLAG_ACTIVITY_NEW_TASK标志位被设置后,会在新的任务中创建被调用组件。
intent.setFlags用来清除性的设置新的标志位,intent.addFlags用来保留原有的添加新的标志位
Intent对象若干数据项的含义总结的更多相关文章
- JAVA新手笔记 Intent对象和Bundle对象
Intent对象和Bundle对象 功能主要是在 MainActivity中定义了2个EditText,当用户输入内容,把他传入到第二个活动, 自己新创的活动中,MyActivity中 放在MainA ...
- Intent对象详解——使用Intent启动系统组件
Android的应用程序包含三种重要组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动它们——都是依靠Intent来启动的,Intent就封装了程 ...
- Intent 对象在 Android 开发中的应用
转自(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/) Android 是一个开放性移动开发平台,运行在该平 ...
- Intent对象(组件间的通信原理)
Intent对象是一种可以在运行时动态绑定组件的关键技术,通过使用Intent对象,可以告诉系统你想要实现什么样的操作,也就是Intent对象里面包含的请求内容,请求再由Android操作系统接收到, ...
- javascript数据基本定义以及对象{}和数组[]的含义和使用
一.基本的数据类型 原始类型(简单数据类型.基本数据类型) Undefined类型: 表示声明了变量但未对其初始化时赋予该变量的值.undefined为Undefined类型下的唯一的一个值. Nul ...
- 跟 Task 有关的 Intent对象中设置的Flag
FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定. FLAG_ACTIVI ...
- Intent传递对象的两种方法
Android为intent提供了两种传递对象参数类型的方法 分别需要使实体类实现Serializable接口.Parcelable接口 首先我们要知道,传递对象,需要先将对象序列化 一.那么为什么要 ...
- Android Intent 基本使用及对象构成
Intent基本使用 Intent可以理解为不同组件通信的媒介或者信使. Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast. 具体方法如下表 ...
- intent传值传对象跳转
intent传值传对象跳转 1.传值 //原activity中存入一个字段 intent = new Intent(From.this, To.class); intent.putExtra(&quo ...
随机推荐
- Mapreduce shuffle和排序
Mapreduce为了确保每个reducer的输入都按键排序.系统执行排序的过程-----将map的输出作为输入传给reducer 称为shuffle.学习shuffle是如何工作的有助于我们理解ma ...
- Java 开发手册之编程规约
一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / n ...
- python 不同版本下载资源
Unofficial Windows Binaries for Python Extension Packages by Christoph Gohlke, Laboratory for Fluore ...
- HTML <meta> http-equiv Attribute 说明
1. 说明 Value Description content-type Specifies the character encoding for the document. Example: & ...
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- nagios(centreon)监控lvs
客户端配置:让nagios账户有权限查看ipvsadminvim /etc/sudoers[root@SSAVL2318 etc]# visodu /etc/sudoers加入 nagios ALL ...
- 【Python学习笔记】macosx 10.11 python pip install 出现错误OSError: [Errno 1] Operation not permitted:
http://www.cnblogs.com/xiongqiangcs/p/4914049.html pip install --upgrade pip sudo pip install numpy ...
- TCP/IP/HTTP
一.什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...
- DSP SYS/BIOS开发
https://blog.csdn.net/lg1259156776/article/details/80695318
- Java-Maven-Runoob:Maven 快照(SNAPSHOT)
ylbtech-Java-Maven-Runoob:Maven 快照(SNAPSHOT) 1.返回顶部 1. Maven 快照(SNAPSHOT) 一个大型的软件应用通常包含多个模块,并且通常的场景是 ...