Intent进行组件通信的一些体会

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应用程序中组建的可复用性。

  • 缺点:启动慢。
时间: 2024-10-14 13:34:18

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

Android组件通信(章节摘要)

1,不同的Activity之间的跳转可以使用Intent完成,用户也可以通过onActivityResult()方法来接收Activity返回的结果. 2,在Android操作系统中,提供了多个可以操作的Intent,用户只需要设置好要跳转的Action以及附加的若干数据即可实现这些程序的调用. 3,Activity的生命周期包括运行态(Running State),暂停态(Pauserd State)和停止态(Stopped State). 4,使用ActivityGroup要比使用TabHo

vue29-vue2.0组件通信_recv

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>智能社--http://www.zhinengshe.com</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, ma

【React源码分析】组件通信、refs、key和ReactDOM

React源码系列文章,请多支持:React源码分析1 - 组件和对象的创建(createClass,createElement)React源码分析2 - React组件插入DOM流程React源码分析3 - React生命周期详解React源码分析4 - setState机制React源码分析5 -- 组件通信,refs,key,ReactDOMReact源码分析6 - React合成事件系统 1 组件间通信 父组件向子组件通信 React规定了明确的单向数据流,利用props将数据从父组件传

Android 学习笔记 7 组件通信及广播消息(二)

Intent隐式启动Activity 隐式启动的好处在于不需要在第一个组件中指明需要启动另外的哪一个组件,而由Android系统来决定,这样有利于降低组件之间的耦合度. 选择隐式启动Activity,Android系统会在程序运行时解析Intent,并根据一定的规则对Intent和组件进行匹配,使Intent上的action.data和category与目标Activity吻合.匹配的组件可以是程序本身的Activity,也可以是Android系统内置的Activity,还可以是第三方应用程序提

vue30-单一事件管理组件通信: vuex

------------------------------------------------------ 可以单一事件管理组件通信: vuex var Event=new Vue(); Event.$emit(事件名称, 数据) Event.$on(事件名称,function(data){ //data }.bind(this)); <!DOCTYPE html> <html lang="en"> <head> <meta charset=

vue-bus 组件通信插件

vue-bus 一个 Vue.js 事件中心插件,同时支持 Vue 1.0 和 2.0 原因 Vue 2.0 重新梳理了事件系统,因为基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆弱.虽然依然保留了父子组件间的事件流,但有诸多限制,比如不支持跨多层父子组件通信,也没有解决兄弟组件间的通信问题. Vue 推荐使用一个全局事件中心来分发和管理应用内的所有事件,详见文档.这是一个最佳实践,同时适用于 Vue 1.0 和 2.0.你当然可以声明一个全局变量来使用事

Angular2 组件通信

1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间的交互方式主要有如下几种: l 使用输入型绑定,把数据从父组件传到子组件 l 通过 setter 拦截输入属性值的变化 l 使用 ngOnChanges 拦截输入属性值的变化 l 父组件监听子组件的事件 l 父组件与子组件通过本地变量互动 l 父组件调用 ViewChild l 父组件和子组件通过服

Intent ,Bundle 组件 两个Activity 互相传值

第一个Activity 1 /** 2 * 3 */ 4 package com.flysnow.sina.weibo; 5 6 import android.app.Activity; 7 import android.content.Intent; 8 import android.os.Bundle; 9 import android.view.View; 10 import android.widget.Button; 11 import android.widget.EditText;

Vuejs——(10)组件——父子组件通信

版权声明:出处http://blog.csdn.net/qq20004604 目录(?)[+] 本篇资料来于官方文档: http://cn.vuejs.org/guide/components.html#u7236_u5B50_u7EC4_u4EF6_u901A_u4FE1 本文是在官方文档的基础上,更加细致的说明,代码更多更全. 简单来说,更适合新手阅读 (二十七)父子组件通信 ①访问子组件.父组件.根组件: this.$parent    访问父组件 this.$children   访问子