Intent进行组件通信的原理

l  Intent协助应用间的交互与通讯

Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述、Android则根据此Intent的描述,负责找到对应的组建,将Intent传递给调用的组建,并完成组建的调用

l  Intent可以激活Android应用的三种类型的核心组建:Activity、Service、BroadcastReceiver

l  可划分为:显示Intent【目标唯一】和隐士Intent【根据目标intentfilter进行筛选】

Intent的使用:

  1. 显示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);

  1. 隐士Intent

l  在不明确设置激活对象的前提下寻找最匹配的组件

l  Android系统会根据隐士Intent的动作(Action)、类别(Category)、数据(URI和数据类型)找到最合适的组件来处理这个意图

l  Intent解析戒指通过查找AndroidMainfest.xml中的IntentFilter,最终找到匹配的Intentde action、type、category这三个属性来进行判断的

Intent-filter

Action:可以有多个,程序中只要有一个匹配就行【必有】

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。

显示启动与隐式启动的区别:

  1. 显示Intent直接指定下一个要跳转到的应用的对象名称。通过Intent.setClass()或intent.setComponent()来指定目标。
  • 优点:不需要进行寻址过滤,使用简单、速度快、定位准确、不受干扰。
  • 缺点:只能在一个工程内部的应用间进行跳转,扩展性不强,系统间耦合紧。显示设置了class会自动屏蔽Implicit形式的intent
  1. 2.    隐士intent
  • 优点:需要指明需要启动哪一个Activity,而由Android系统来决定,有利于使用第三方组件。
  • 隐式启动Activity时,Android系统在应用程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,是Intent上的动作、数据与Activity完全吻合。

匹配的Activity可以是应用程序本身的,也可以是Android系统内置的,还可以是第三方应用程序提供的。这种方式更加强调了Android应用程序中组建的可复用性。

  • 缺点:启动慢。

Intent进行组件通信的一些体会的更多相关文章

  1. 【Android实验】组件通信Intent

    实验目的 [TOC] 了解使用Intent进行组件通信原理 掌握使用Intent启动Activity的方法 熟悉和掌握Android组件间通信的方式和技巧 实验要求 设计一个主Activity和一个子 ...

  2. vue组件通信全面总结

    写在前面 组件间的通信是是实际开发中非常常用的一环,如何使用对项目整体设计.开发.规范都有很实际的的作用,我在项目开发中对此深有体会,总结下vue组件间通信的几种方式,讨论下各自的使用场景 文章对相关 ...

  3. 关于React的父子组件通信等等

    //==================================================此处为父子组件通信 1.子组件调用父组件: 父组件将子组件需要调用方法存入props属性内,子组 ...

  4. Angular2 组件通信

    1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...

  5. vue.js入门(3)——组件通信

    5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...

  6. 进程外组件通信之免注册com通信【原创】

    最近在搞进程外组件通信的东西,写了个demo,免注册的,一直没调通,其实就是两个问题卡了好几天,也没找到有用的资料,试了好几天终于才解决,现简单记录下来,免得大家跟我走一样的弯路.下面com端程序名称 ...

  7. 使用Intent启动组件

    android应用程序的三大组件--Activities.Services.Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译为"意图"(我感 ...

  8. vue2.0 组件通信

    组件通信: 子组件要想拿到父组件数据 props 子组件不允许直接给父级的数据, 赋值操作如果想更改,父组件每次穿一个对象给子组件, 对象之间引用. 例子: <script> window ...

  9. React之组件通信

    组件通信无外乎,下面这三种父子组件,子父组件,平行组件(也叫兄弟组件)间的数据传输.下面我们来分别说一下: 父子组件: var Demo=React.createClass({ getInitialS ...

随机推荐

  1. 操作无法完成,因为文件夹已在另一个程序中打开(the action can't be completed because the folder or a file in it is open in another program)

    解决方法: 启动任务管理器——性能——资源监视器——CPU选项卡——关联的句柄——搜索句柄 ——(输入)要删除的文件夹名——搜索到与文件夹名句柄相关联的进程 (由于此程序进程正在调用文件夹,才造成了对 ...

  2. 比较长的sql语句

    SELECT o. * FROM hq_goods g LEFT JOIN hq_orders o ON o.goods_id = g.id WHERE o.user_id =73 AND o.sta ...

  3. opencv官网

    http://wiki.opencv.org.cn/index.php/Template:Doc

  4. Android集成支付宝接口 实现在线支付

    手机的在线支付,被认为是2012年最看好的功能,我个人认为这也是移动互联网较传统互联网将会大放光彩的一个功能. 人人有手机,人人携带手机,花钱买东西,不再需要取钱付现,不再需要回家上网银,想买什么,扫 ...

  5. 【JavaScript】关于delete

    delete 只能删除属性,不能删除变量 比如 var m = "haha"; delete m; //false m = "haha";----->wi ...

  6. dwr2反推

    package services; import org.directwebremoting.Browser; import org.directwebremoting.ScriptSessions; ...

  7. mysql 数据库性能追踪与分析

    http://bbs.linuxtone.org/thread-20601-1-1.html

  8. 使用@media实现IE hack的方法

    文章简介:众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用“\0”,“\”和“\9”来仅让IE某些版本识别,而对于现代浏览器来说,他会直 ...

  9. 查看Linux系统架构类型的5条常用命令

    导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...

  10. 深入理解Redis中的主键失效及其实现机制

    参考:http://blog.sina.com.cn/s/articlelist_1221155353_0_1.html 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids ...