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 ...
随机推荐
- request.getDispatcher().forward(request,response)和response.sendRedirect()的区别
在进行web开发时,跳转是最常见的,今天在这里来学习下2种跳转: 第一种是request.getDispatcher().forward(request,response): 1.属于转发,也是服务器 ...
- database - 数据库设计/使用容易忽略的细节
一.设计 1,数据类型尽量使用数字型,数字型的比较比字符型的快很多 2,数据类型尽量小,预测可以满足未来需求的前提 3,尽量建表时字段不允许为null,除非必要,可以用NOT NULL+DEFAULT ...
- 关于yum
1. yum的本地安装 yum install --downloadonly --downloaddir=/opt/software cd /opt/software yum localinstall ...
- 在laravel中使用QrCode包生成二维码
http://laravelacademy.org/post/2605.html 一切都是按照文档上的说明操作,没有问题
- erlang配置三方库
暴力的: 直接下载解压以后放到erlang的lib目录,比如/usr/local/Cellar/erlang/17.3/lib/erlang/lib 和谐的: 在用户名下建立.erlang文件 在里面 ...
- mongodb配置和基本操作
MongoDB3.0新特性WiredTigerMMAPv1可插拔引擎API基于web的可视化管理工具 查看版本号mongod --version启动数据库 mongod --dbpath $dbpat ...
- .net中webconfig自定义配置
在configuration节点,也就是文件的根节点下,增加如下节点 <appSettings> <!--<add key="propPath" value ...
- mina2中IoHandler
IoHandler 当我们通过IoSession执行相关操作的时候,如写数据,这些事件会触发Mina框架抽象的IoService实例,从而调用Mina框架底层的相关组件进行处理.这时,配置的IoHan ...
- Windows10 官方原版镜像下载途径 Label:win10解决方案
https://www.microsoft.com/en-gb/software-download/windows10ISO 设置浏览标签为手机以避免跳转,下载即可 或者手机打开该网址,获取下载链接 ...
- 第10章 深入理解Session与Cookie
需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...