在Android中通過Intent使用Bundle傳遞對象的使用方法
Android開發(fā)中有時(shí)需要在應(yīng)用中或進(jìn)程間傳遞對象,下面詳細(xì)介紹Intent使用Bundle傳遞對象的方法。
被傳遞的對象需要先實(shí)現(xiàn)序列化,而序列化對象有兩種方式:java.io.Serializable和android.os.Parcelable
Java中使用的是Serializable,而谷歌在Android使用了自定義的Parcelable。
兩種序列化方式的區(qū)別:
1.在使用內(nèi)存的時(shí)候,Parcelable比Serializable性能高,推薦使用Parcelable類;
2.Serializable在序列化的時(shí)候會產(chǎn)生大量的臨時(shí)變量,從而引起頻繁的GC;
3.Parcelable不能使用在要將數(shù)據(jù)存儲在磁盤上的情況,因?yàn)镻arcelable不能很好的保證數(shù)據(jù)的持續(xù)性在外界有變化的情況下,
這種情況建議使用Serializable。
第一步:定義序列化實(shí)體類;
Serializable方式:
/**
* PersonSer
*
* @author http://blog.csdn.net/zuolongsnail
*/
public class PersonSer implements Serializable {
/**
* serialVersionUID的作用是在修改實(shí)體類后,可以正常的序列化和反序列化,在此不多說,大家可以谷歌百度下。
*/
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;
}
/**
* 序列化實(shí)體類
*/
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;
}
/**
* 將實(shí)體類數(shù)據(jù)寫入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方法,也就可以傳遞數(shù)組和列表
bundle.putParcelable(PAR_KEY, personPar);
intent.putExtra("type", PAR_TYPE);
// Intent也有putParcelableArrayListExtra方法,可以傳遞實(shí)現(xiàn)Parcelable接口的對象列表
intent.putExtras(bundle);
startActivity(intent);
break;
}
第三步:獲取對象;
StringBuffer sb = new StringBuffer();
String type = getIntent().getStringExtra("type");
// 根據(jù)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");
}
運(yùn)行結(jié)果截圖:

附源碼:源碼下載
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
5個(gè)Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法
本文主要介紹了5個(gè)Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
Flutter中網(wǎng)絡(luò)圖片加載和緩存的實(shí)現(xiàn)
這篇文章主要介紹了Flutter中網(wǎng)絡(luò)圖片加載和緩存的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Android自定義View實(shí)現(xiàn)抽獎轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)抽獎轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析
這篇文章主要為大家介紹了Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android開發(fā)中應(yīng)用程序分享功能實(shí)例
這篇文章主要介紹了Android開發(fā)中應(yīng)用程序分享功能,結(jié)合實(shí)例形式分析了基于Intent實(shí)現(xiàn)Android程序分享功能的技巧,需要的朋友可以參考下2016-02-02
詳解androidstudio項(xiàng)目上傳到github方法以及步驟
在使用studio開發(fā)的項(xiàng)目過程中有時(shí)候我們想將項(xiàng)目發(fā)布到github上,studio其實(shí)是自帶這種功能的,那么如何使用呢,下面我們就一起來了解一下2019-01-01
Android中極簡的js與java的交互庫(SimpleJavaJsBridge)
本文主要介紹了Android中極簡的js與java的交互庫--SimpleJavaJsBridge,它可以讓js與java之間的通信更簡單。 具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
詳解Andorid開發(fā)中反射機(jī)制是怎么一回事
反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對于任何一個(gè)對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為Java的反射機(jī)制2022-11-11

