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 ...
随机推荐
- pmm监控页面502
我们知道pmm主要使用的是 普罗米修斯采集和grafana日志统计显示. 最近为硬盘扩过一次容量,主要是docker使用的,我的pmm是跑在docker上的,但是重启后pmm的debug日志下载502 ...
- LeetCode Minimum Time Difference
原题链接在这里:https://leetcode.com/problems/minimum-time-difference/description/ 题目: Given a list of 24-ho ...
- 非常好用的css代码格式化工具
http://tool.lanrentuku.com/cssformat/ 可以横向排列和竖向排列,感谢互联网,让我找到你了.
- Angular2使用boostrap和ng-bootstrap总结
Angular2使用bootstrap有几种方式,本文主要介绍两种方式进行Boostrap样式的使用: 一.直接通过静态文件的方式进行引入: 通过命令新建一个Bootstrap的工程 ng new B ...
- retful上传文件php的实现
项目中要使用restful上传文件到服务器,一直不能成功,后生成相关串后在postman中上传成功,利用这个工具生成php curl的代码,后逐步比对产生以下代码. /** * 上传文件 ...
- 搭建Dynamic Web Project(动态web项目)的springmvc工程2
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...
- android签名生成和发布
首先,我们需要一个keystore,当然已经有了的话就不用这一步了:cmd下:进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这个文件C ...
- unittest之跳过用例(skip) (含如何调用类里面函数相互调取变量的方法)
当测试用例写完后,有些模块有改动时候,会影响到部分用例的执行,这个时候我们希望暂时跳过这些用例. 或者前面某个功能运行失败了,后面的几个用例是依赖于这个功能的用例,如果第一步就失败了,后面的用例也就没 ...
- 【转】JMeter 聚合报告之90% Line参数说明
其实要说明这个参数的含义非常简单,可能你早就知道他的含义,但我对这个参数一直有误解,而且还一直以为是“真理”,原于一次面试,被问到了这个问题,所以引起我这个参数的重新认识. 先说说我错误的认识: 我一 ...
- Velodyne线性激光雷达pcap文件格式及写入、数据解析 Lebal:激光雷达
转载自https://blog.csdn.net/qq_25241325/article/details/80766305 roslaunch loam_velodyne loam_velodyne. ...