讲讲Intent用法

124 阅读3分钟

1.Intent传递数据时,可以传递哪些类型数据?

Intent可以传递的数据类型非常的丰富,Java的基本数据类型和String以及他们的数组形式都可以,除此之外还可以传递实现了Serializable和Parcelable接口的对象。

2.Serializable和Parcelable的区别

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

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

2).parcelable不能使用在要将数据存储在磁盘上的情况。尽管serializable效率低点,但在这种情况下,还是建议你用serializable.

实现:

    1).serializable的实现,只需要继承serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
    
    2).parcelabel的实现,需要在类中添加一个静态成员变量creator,这个变量需要继承parcelable.creator接口。
    
    public class MyParcelable implements Parcelable {
     private int mData;
      public int describeContents() {
       return 0;
           }
       public void writeToParcel(Parcel out, int flags) 
      { out.writeInt(mData);
          }
       public static final Parcelable.Creator<MyParcelable> CREATOR
      = new Parcelable.Creator<MyParcelable>() {
       public MyParcelable createFromParcel(Parcel in) {
       return new MyParcelable(in);
       }
    public MyParcelable[] newArray(int size) {
   return new MyParcelable[size];
     }
         };
     private MyParcelable(Parcel in) 
    {  mData = in.readInt();
       } }

3.分析一下Intent和IntentFilter

Android 中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封email,其中不仅应该包含收件地址,还可以包含集体内容,对于一个intent对象,消息“目的地”是必须的,而内容则是可选项。通过 Intent可以实现各种系统组件的调用与激活。 IntentFilter:可以理解为邮局或者是一个信笺的分拣系统:

这个分拣系统通过3个参数来识别:

Action:动作 view

Data:数据uri

Category:而外的附加信息

Action 匹配。 Action 是一个用户定义的字符串,用于描述一个android应用程序组件,一个IntentFilter可以包含多个Action.在AndroidManifest.xml的Activity定义时可以在其 节点指定一个Action列表用于表示Activity所能接受的“动作”,例如:如果我们在启动一个activity时使用这样的intent对象:

在manifest中添加 ……

或者动态添加:

Intent intent =new Intent(); intent.setAction("cn.it.action");

那么所有的Action列表中包含了“cn.it.action”的Activity都将会匹配成功。

Android预定义了一系列的Action分别表示特定的系统动作。这些Action通过常量的方式定义在android.content.Intent中,以 “ACTION_”开头。我们可以在android提供的文档中找到它们的详细说明。

  URI数据匹配
  

一个Intent可以通过URI携带外部数据给目标组件。在 节点中,通过节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme指定协议,host,port,path指定数据的位置、端口、和路径。如下:

        <data android:mimetype="mimeType" android:scheme="scheme"
        android:host="host"  android:port="port" android:path="path" />
        

电话的uri tel : 12345 网站的:www.baidu.com 自己定义的 uri itcast://cn.it.person/10 如果在Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时,URI数据匹配才会成功。

Category 类别匹配

节点中可以为组件定义一个category类别列表,当Intent中包含这个列表的所有项目时Category类别匹配才会成功。

4.intent的意义

保证了组件之间的通信,在组件之间传递了数据。

各位小伙伴对我感兴趣的可以关注我的公众号:「growth_zh」,我在哪里等你哟。