国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

在Android中通過Intent使用Bundle傳遞對象的使用方法

2019-12-12 04:45:16
字體:
來源:轉載
供稿:網友

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

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

Java中使用的是Serializable,而谷歌在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的作用是在修改實體類后,可以正常的序列化和反序列化,在此不多說,大家可以谷歌百度下。    */   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"); } 

運行結果截圖:

附源碼:源碼下載

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清原| 万安县| 图木舒克市| 上饶市| 山阴县| 永和县| 西乌| 汉阴县| 河津市| 万盛区| 会昌县| 革吉县| 武乡县| 招远市| 监利县| 双鸭山市| 南和县| 兴安县| 高青县| 游戏| 常德市| 汉阴县| 墨竹工卡县| 紫阳县| 兰考县| 广宁县| 合肥市| 屯留县| 东丽区| 盱眙县| 罗平县| 拜城县| 商城县| 瓮安县| 荔浦县| 吉木萨尔县| 河西区| 右玉县| 时尚| 长岭县| 昭苏县|