Intent进行组件通信的一些体会
Intent进行组件通信的原理
l Intent协助应用间的交互与通讯
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述、Android则根据此Intent的描述,负责找到对应的组建,将Intent传递给调用的组建,并完成组建的调用
l Intent可以激活Android应用的三种类型的核心组建:Activity、Service、BroadcastReceiver
l 可划分为:显示Intent【目标唯一】和隐士Intent【根据目标intentfilter进行筛选】
Intent的使用:
- 显示Intent
² 启动Activity:[显示]
Intent intent=new Intent(this,NewsDetailActivity.class);
super.startActivity(intent);
等价于
ComponentName comp=new ComponentName(this,NewsDetailActivity.class);
Intent intent=new Intent();
intent.setComponent(comp);
super.startActivity(intent);
- 隐士Intent
l 在不明确设置激活对象的前提下寻找最匹配的组件
l Android系统会根据隐士Intent的动作(Action)、类别(Category)、数据(URI和数据类型)找到最合适的组件来处理这个意图
l Intent解析戒指通过查找AndroidMainfest.xml中的IntentFilter,最终找到匹配的Intentde action、type、category这三个属性来进行判断的
Intent-filter
l Action:可以有多个,程序中只要有一个匹配就行【必有】
l Category:必须至少有一个类别,用startActivity启动【必有】
l Data:路径匹配【协议scheme://主机名:端口号/路径】、数据类型匹配mimeType。
² 启动Activity:[隐式]
(1)在java代码中设置隐士对象
Intent intent=new Intent();
intent.setAction("show_details");//intent.ACTION_VIEW
intent.addCategory("detail");
// intent.setData(Uri.parse("http://www.jereh.com"));
// intent.setType("image/*");
super.startActivity(intent);
(2)AndroidMainfest.xml 相应的<activity>中进行配置
<intent-filter >
<action android:name="show_details"/>
<action android:name="android.intent.action.VIEW"/>
<!-- 隐士Intent必须保留 DEFAULT-->
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="detail"/>
<!-- <data android:mimeType="image/*"/>
<data android:scheme="http" android:host="www.jereh.com"/> -->
</intent-filter>
注意:在配置隐式intent的fitler时,必须包含默认的DEFAULT category属性
<category android:name="android.intent.category.DEFAULT"/>
一旦设置了data属性,基本上也就确定了一个Activity。
显示启动与隐式启动的区别:
- 显示Intent直接指定下一个要跳转到的应用的对象名称。通过Intent.setClass()或intent.setComponent()来指定目标。
- 优点:不需要进行寻址过滤,使用简单、速度快、定位准确、不受干扰。
- 缺点:只能在一个工程内部的应用间进行跳转,扩展性不强,系统间耦合紧。显示设置了class会自动屏蔽Implicit形式的intent
- 2. 隐士intent
- 优点:需要指明需要启动哪一个Activity,而由Android系统来决定,有利于使用第三方组件。
- 隐式启动Activity时,Android系统在应用程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,是Intent上的动作、数据与Activity完全吻合。
匹配的Activity可以是应用程序本身的,也可以是Android系统内置的,还可以是第三方应用程序提供的。这种方式更加强调了Android应用程序中组建的可复用性。
- 缺点:启动慢。
Intent进行组件通信的一些体会的更多相关文章
- 【Android实验】组件通信Intent
实验目的 [TOC] 了解使用Intent进行组件通信原理 掌握使用Intent启动Activity的方法 熟悉和掌握Android组件间通信的方式和技巧 实验要求 设计一个主Activity和一个子 ...
- vue组件通信全面总结
写在前面 组件间的通信是是实际开发中非常常用的一环,如何使用对项目整体设计.开发.规范都有很实际的的作用,我在项目开发中对此深有体会,总结下vue组件间通信的几种方式,讨论下各自的使用场景 文章对相关 ...
- 关于React的父子组件通信等等
//==================================================此处为父子组件通信 1.子组件调用父组件: 父组件将子组件需要调用方法存入props属性内,子组 ...
- Angular2 组件通信
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- vue.js入门(3)——组件通信
5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...
- 进程外组件通信之免注册com通信【原创】
最近在搞进程外组件通信的东西,写了个demo,免注册的,一直没调通,其实就是两个问题卡了好几天,也没找到有用的资料,试了好几天终于才解决,现简单记录下来,免得大家跟我走一样的弯路.下面com端程序名称 ...
- 使用Intent启动组件
android应用程序的三大组件--Activities.Services.Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译为"意图"(我感 ...
- vue2.0 组件通信
组件通信: 子组件要想拿到父组件数据 props 子组件不允许直接给父级的数据, 赋值操作如果想更改,父组件每次穿一个对象给子组件, 对象之间引用. 例子: <script> window ...
- React之组件通信
组件通信无外乎,下面这三种父子组件,子父组件,平行组件(也叫兄弟组件)间的数据传输.下面我们来分别说一下: 父子组件: var Demo=React.createClass({ getInitialS ...
随机推荐
- Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集
C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...
- Codeforces Round #180 (Div. 2) C. Parity Game 数学
C. Parity Game 题目连接: http://www.codeforces.com/contest/298/problem/C Description You are fishing wit ...
- Educational Codeforces Round 4 A. The Text Splitting 水题
A. The Text Splitting 题目连接: http://www.codeforces.com/contest/612/problem/A Description You are give ...
- TCP具体解释(2):三次握手与四次挥手
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你给别人打电话.必须等线路接通了.对方拿 ...
- cocos2dx的图片载入
//data: 图片文件数据 dataLen: 文件长度 bool Image::initWithImageData(const unsigned char * data, ssize_t dataL ...
- 【JavaScript】新浪微博ajax请求后改变地址栏url,但页面不跳转的方案解析
新浪微博当你弹出一个视频的时候再点下一页时,原视频还在,而且地址栏的url的页数变了.对于这种网上讨论最多的方案有以下几种: 一.通过锚点Hash实现在这方面其实国内很早就有做了,比如淘宝画报,通过的 ...
- STL中的优先级队列(priority_queue)的自己实现priqueue
这篇文章主要介绍堆(最大堆和最小堆),以及一些系统对一些任务,比如线程,进程做调度的时候,所采用的优先级队列. 主要思想就是,做一个最大堆(任务的权重最大的在顶端),把顶端的任务取出,重新做一个堆,处 ...
- vs开发工具之--自动生成注释
GhostDoc是Visual Studio的一个免费插件,轻松一个快捷键CTRL+SHIFT+D就能够帮助自动生成注释 下载地址:http://submain.com/download/ghostd ...
- Android横竖屏切换及其相应布局载入问题
第一.横竖屏切换连带载入多屏布局问题: 假设要让软件在横竖屏之间切换.因为横竖屏的高宽会发生转换,有可能会要求不同的布局. 能够通过下面两种方法来切换布局: 1)在res文件夹下建立layout-la ...
- Swift中的问号?和感叹号!
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化.如果在使用变量之前不进行初始化就会报错: var ...