Android中的Intent(意图)的使用

概述:

Intent(意图)主要是解决Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

分类:

隐式意图

不用指定要打开的activity, 通过动作和数据的组合去查找系统中, 能处理指定动作和数据的界面,因此该方法效率较低。

应用场景:

一个应用想被另一个应用打开。

一个应用想打开另一个应用程序。

开启方法:

// 开启代码
Intent intent = new Intent();
intent.setAction("com.test.rpcalc.CALC_RP");
intent.setData(Uri.parse("calc://张三"));
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);

// 被打开界面清单文件的配置
<intent-filter >
    <action android:name="com.test.rpcalc.CALC_RP"/>
    <data android:scheme="calc" />
    <!-- 额外类别参数 -->
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

显式意图

指定(包名, 类名), 直接进行跳转。 效率高。

应用场景:

应用内部的界面之间进行跳转(安全)

应用之间跳转可以给Activity配置android:exported="true", 默认false

开启方法

方式一:
Intent intent = new Intent(this, SelectNumberActivity.class);
startActivity(intent);
方式二:
Intent intent = new Intent();
intent.setClassName("com.test.smssenderapp", "com.test.smssenderapp.SelectNumberActivity");
startActivity(intent);

Intent的数据传递

1.intent.setData(uri)  --  intent.getData();

- 传递字符串数据, 比较局限.

2.intent.putExtra(name, value)

- 8 大基本数据类型(byte,short,int,long;float,double;char;boolean), 及其数组。

- String字符串传CharSequence

- Serializable 序列化对象 (序列化到文件) 接口

- Parcelable 序列化对象 (邮包化到内存) 接口

- Bundle 类似于map的数据集合。使用 putExtras()。

Intent中传递对象的方法:

一种是Bundle.putSerializable(Key,Object);

另一种是Bundle.putParcelable(Key, Object);

选择序列化方法的原则:

1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。

2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。

参考博文链接:

Android中Intent中传递对象的方法》  http://www.oschina.net/code/snippet_1408868_39329

《Android中Parcelable接口用法》http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 16:31:22

Android中的Intent(意图)的使用的相关文章

一个Xamarin.Android中与intent有关的&quot;动人&quot;爱情故事

一个Xamarin.Android中与intent有关的"动人"爱情故事 第一步,写项目中的第一个界面. <?xml version="1.0" encoding =" utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation= "vertical &q

Android中常见Intent习惯用法-上篇(附源码下载)

Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>.如果对Intent Filter不是特别了解,可以参见博文<Android中Intent对象与Intent Filter过滤匹配过程详解>. 本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信.发送邮件.启动摄像机拍照录视频.设置闹铃.打开WIFI设置界面等等. 限于篇幅,本博文分为上下两篇,这是上篇

Android中的Intent在两个页面传值问题

Android中的Intent在两个页面见传值主要有两种,一种是在两个Activity之间传值,另一种是在一个普通页面和一个Activity之间传递数据. 1. Intent在两个Activity之间传值 首先定义两个Activity   FirstActivity和SecondActivity 在FirstActivity的onCreate()方法中的代码 Intent intent = new Intent(); String str = "要传递的数据"; intent.putE

Android中的intent属性

android之Intent的七大属性 2015年04月03日 ⁄ Android ⁄ 共 14866字 ⁄ 字号 小 中 大 ⁄ 1条评论 Intent用于封装程序的“调用意图”.两个Activity之间,可以把需要交换的数据,封装成Bundle对象,然后使用Intent对象,携带数据到另一个Activity中.实现两个Activity的数据交换. Intent还是各种应用程序组件之间通信的重要媒介.启动Activity.Service.BroadcastReceiver,都需要使用Inten

Android中的Intent Filter匹配规则介绍

本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity.Service.Broadcast Receiver)中打开另一个组件. Intent可分为隐式(implicitly)和显式(explicitly)两种: Explicitly Intent:在知道要打开哪个具体的Component时使用,通过指定调用者和被调用者即可打开目标Component:

Android中的Intent详解

前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activity之间进行跳转,在Android中这个动作是靠Intent来完成的.你通过startActivity()方法发送一个Intent给系统,系统会根据这个Intent帮助你找到对应的Activity,即使这个Activity在其他的应用中,也可以用这种方法启动它. Intent的定义: Intent是

Android中目的地Intent的使用

一.什么是Intent? Intent的中文意思是目的.在Android中也是“目的”的意思.就是我们要去哪里,从这个activity要前往另一个Activity就需要用到Intent. 示例代码一: 1: //定义一个Intent 2: Intent intent = new Intent(IntentDemo.this, AnotherActivity2.class); 3: //启动Activity 4: startActivity(intent); 以上示例代码的作用是从IntentDe

android中使用Intent在activity之间传递数据

android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name", "使用Intent传递数据"); startActivity(intent); 然后再目标activity中接收数据: Intent intent=getInten

android中使用intent来实现Activity带数据跳转

大家都知道startActivity()是用来切换跳转Activity的.如果想要在另个Activity中出书数据的话.只需要在源activity中使用intent.putExtra()方法传出数据.在对应activity中使用intent.get**Extra()方法接收数据就行了 那么startActivityForResult()方法呢.它也是用来带数据跳转activity的.可是这两个方法具体有什么区别呢? 这就要说说带数据跳转的方向了. 第一个方法只能把数据发送过去.可是如果子acti