Android 通過Intent使用Bundle傳遞對象詳細介紹_Android

來源:互聯網
上載者:User

Android 通過Intent使用Bundle傳遞對象

Android開發中有時需要在應用中或進程間傳遞對象,下面詳細介紹Intent使用Bundle傳遞對象的方法。

被傳遞的對象需要先實現序列化,而序列化對象有兩種方式:java.io.Serializable和android.os.Parcelable

Java中使用的是Serializable,而Google在Android使用了自訂的Parcelable。

兩種序列化方式的區別:

1.在使用記憶體的時候,Parcelable比Serializable效能高,推薦使用Parcelable類;
2.Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC;
3.Parcelable不能使用在要將資料存放區在磁碟上的情況,因為Parcelable不能很好的保證資料的持久性在外界有變化的情況下,

這種情況建議使用Serializable。

第一步:定義序列化實體類;

Serializable方式:

/**  * PersonSer  *  * @author http://blog.csdn.net/zuolongsnail  */ public class PersonSer implements Serializable {   /**   * serialVersionUID的作用是在修改實體類後,可以正常的序列化和還原序列化,在此不多說,大家可以Google百度下。   */  private static final long serialVersionUID = -7620435178023928252L;   private String name;   private int age;   public String getName() {   return name;  }   public void setName(String name) {   this.name = name;  }   public int getAge() {   return age;  }   public void setAge(int age) {   this.age = age;  }  } 

Parcelable方式:

/**  * PersonPar  *  * @author http://blog.csdn.net/zuolongsnail  */ public class PersonPar implements Parcelable {   private String name;   private int age;   public String getName() {   return name;  }   public void setName(String name) {   this.name = name;  }   public int getAge() {   return age;  }   public void setAge(int age) {   this.age = age;  }   /**   * 序列化實體類   */  public static final Parcelable.Creator<PersonPar> CREATOR = new Creator<PersonPar>() {   public PersonPar createFromParcel(Parcel source) {    PersonPar personPar = new PersonPar();    personPar.name = source.readString();    personPar.age = source.readInt();    return personPar;   }    public PersonPar[] newArray(int size) {    return new PersonPar[size];   }  };   @Override  public int describeContents() {   return 0;  }   /**   * 將實體類資料寫入Parcel   */  @Override  public void writeToParcel(Parcel parcel, int flags) {   parcel.writeString(name);   parcel.writeInt(age);  }  } 

第二步:傳遞序列化對象;

Intent intent = new Intent(MainActivity.this, DestActivity.class); Bundle bundle = new Bundle(); switch (v.getId()) { case R.id.serializable_btn:  // Serializable傳遞對象  PersonSer personSer = new PersonSer();  personSer.setName("zuolong");  personSer.setAge(26);  bundle.putSerializable(SER_KEY, personSer);  intent.putExtra("type", SER_TYPE);  intent.putExtras(bundle);  startActivity(intent);  break; case R.id.parcelable_btn:  // Parcelable傳遞對象  PersonPar personPar = new PersonPar();  personPar.setName("snail");  personPar.setAge(27);  // Bundle有putParcelableArray和putParcelableArrayList方法,也就可以傳遞數組和列表  bundle.putParcelable(PAR_KEY, personPar);  intent.putExtra("type", PAR_TYPE);  // Intent也有putParcelableArrayListExtra方法,可以傳遞實現Parcelable介面的對象列表  intent.putExtras(bundle);  startActivity(intent);  break; } 

第三步:擷取對象;

StringBuffer sb = new StringBuffer(); String type = getIntent().getStringExtra("type"); // 根據type判斷是哪種類型 if (type.equals(MainActivity.SER_TYPE)) {  // 擷取Serializable對象  PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(    MainActivity.SER_KEY);  sb.append("----From Serializable----").append("\n");  sb.append("Name:").append(personSer.getName()).append("\n");  sb.append("Age:").append(personSer.getAge()).append("\n"); } else if (type.equals(MainActivity.PAR_TYPE)) {  // 擷取Parcelable對象  PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(    MainActivity.PAR_KEY);  sb.append("----From Parcelable----").append("\n");  sb.append("Name:").append(personPar.getName()).append("\n");  sb.append("Age:").append(personPar.getAge()).append("\n"); } 

附源碼:下載地址

運行結果截圖:

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.