編輯:關於Android編程
Android 通過Intent使用Bundle傳遞對象
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"); }
附源碼:下載地址
運行結果截圖:
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
1.采用PUSCH跳頻時需要注意的問題在上行子幀中,PUCCH信道處於帶寬的高低兩側,或者說位於頻帶的邊緣,PUSCH信道則位於帶寬的中間。PUCCH信道也以RB對為基本
有些列表信息需要手動去更新,此時比較常用的就是下拉刷新列表,在這裡就使用下拉列表來刷新當前Wifi信息 目錄結構 界面 關鍵代碼 下拉列表類 p
1.View 繪制流程ViewGroup也是繼承於View,下面看看繪制過程中依次會調用哪些函數。 說明:measure()和onMeasure()在View.Java源
想成為Android的傑出開發工程師,不懂得Android的設計規則怎麼可以,Android4.0問世後谷歌公司為Android程序員規范了一系列的設計原則,不要再盲目的