Android中的Intent(意图)的使用

概述:

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

分类:

隐式意图   

        不用指定要打开的activity, 通过动作和数据的组合去查找系统中, 能处理指定动作和数据的界面,因此该方法效率较低。
   应用场景:
        一个应用想被另一个应用打开。
        一个应用想打开另一个应用程序。

        开启方法: 

  1. // 开启代码  
  2. Intent intent = new Intent();  
  3. intent.setAction("com.test.rpcalc.CALC_RP");  
  4. intent.setData(Uri.parse("calc://张三"));  
  5. intent.addCategory("android.intent.category.DEFAULT");  
  6. startActivity(intent);  
  7.   
  8. // 被打开界面清单文件的配置  
  9. <intent-filter >  
  10.     <action android:name="com.test.rpcalc.CALC_RP"/>  
  11.     <data android:scheme="calc" />  
  12.     <!-- 额外类别参数 -->  
  13.     <category android:name="android.intent.category.DEFAULT"/>  
  14. </intent-filter>  

显式意图

   指定(包名, 类名), 直接进行跳转。 效率高。
   应用场景:
       应用内部的界面之间进行跳转(安全)
       应用之间跳转可以给Activity配置android:exported="true", 默认false
   开启方法

  1. 方式一:  
  2. Intent intent = new Intent(this, SelectNumberActivity.class);  
  3. startActivity(intent);  
  4. 方式二:  
  5. Intent intent = new Intent();  
  6. intent.setClassName("com.test.smssenderapp""com.test.smssenderapp.SelectNumberActivity");  
  7. 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值