详解Android中通过Intent类实现组件间调用的方法

2019-12-10 18:00:01王冬梅

对于显式Intent,因为他已经指明了要调用的具体的类,所以Android会忽略掉其action,category以及data属性。(个人觉得显示Intent调用比隐式的更快些)

Serializable vs Parcelable
Android 主要是通过Intent来实现组件之间的相互调用,同时还可以传递附加的数据。这些数据主要是存储在Bundle之中(当调用Intent.putExtras(Bundle)时,Android会复制Bundle中的数据,而不是引用,因此再修改Bundle中的数据并不会改变Intent中携带的数据)。

Bundle之中可以存放基本数据类型以及实现了Serializable或Parcelable接口的类。

当我们要向Bundle中存放一个类Obj(包含两个int成员的简单类),可以让它实现Serializable或Parcelable接口,如下所示:

1.Serializable

 

public class Obj implements Serializable {
  private int a;
  private int b;
  public Obj(int a, int b) {
    this.a = a;
    this.b = b;
  }
  
  @Override
  public String toString() {
    return "Obj: [" + a + ", " + b + "]";
  }
}

我们可以通过intent.putExtra("obj", new Obj(1, 2));来将其放入intent中,然后通过 obj = (Obj) intent.getSerializableExtra("obj");来将其取出。
2.Parcelable

 

public class ObjPar implements Parcelable {
  private int a;
  private int b;
  public ObjPar(int a, int b) {
    this.a = a;
    this.b = b;
  }
  
  @Override
  public String toString() {
    return "Obj: [" + a + ", " + b + "]";
  }
  @Override
  public int describeContents() {
    return 0;
  }
  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(a);
    dest.writeInt(b);
  }
  
  public static final Parcelable.Creator<ObjPar> CREATOR = new Creator<ObjPar>() {
    
    @Override
    public ObjPar[] newArray(int size) {
      return new ObjPar[size];
    }
    
    @Override
    public ObjPar createFromParcel(Parcel source) {
      
      return new ObjPar(source.readInt(), source.readInt());
    }
  };
}