Android編程使用Intent傳遞對(duì)象的方法分析
本文實(shí)例分析了Android編程使用Intent傳遞對(duì)象的方法。分享給大家供大家參考,具體如下:
之前的文章中,介紹過Intent的用法,比如啟動(dòng)活動(dòng),發(fā)送廣播,啟發(fā)服務(wù)等,并且可以使用Intent時(shí)傳遞一些數(shù)據(jù)。如下代碼所示:
Intent intent = new Intent(this,SecondActivity.class);
intent.putExtra("info", "I am fine");
startActivity(intent);
在傳遞數(shù)據(jù)時(shí),使用的方法是putExtra,支持的數(shù)據(jù)類型有限,如何傳遞對(duì)象呢??
在Android中,使用Intent傳遞對(duì)象有兩種方式:Serializable序列化方式以及Parcelable串行化方式。
1、Serializable方式
此種方式表示將一個(gè)對(duì)象轉(zhuǎn)換成可存儲(chǔ)或者可傳輸?shù)臓顟B(tài),序列化后的對(duì)象可以在網(wǎng)絡(luò)上進(jìn)行傳輸,可以存儲(chǔ)到本地。
對(duì)象序列化,只需要實(shí)現(xiàn)Serializable類。
package com.example.testapplication;
import java.io.Serializable;
/**
* 對(duì)象序列化
* @author yy
*
*/
public class Emp implements Serializable {
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;
}
}
那么Intent如何傳遞對(duì)象參數(shù)呢,查看API發(fā)現(xiàn)如下方法:
因此,使用該方法傳遞,如下:
Intent intent = new Intent(this,SecondActivity.class);
intent.putExtra("obj", new Emp());
startActivity(intent);
那么如何獲取呢?使用如下方法:
這樣就獲得了Emp對(duì)象了。
2、Parcelable方式
該種方式的實(shí)現(xiàn)原理是將一個(gè)完整的對(duì)象進(jìn)行分解,使分解的每一部分都是Intent所支持的數(shù)據(jù)類型。示例如下:
package com.example.testapplication;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Parcelable方式
* @author yy
*
*/
public class Emp2 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;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flag) {
//寫出name
dest.writeString(name);
//寫出age
dest.writeInt(age);
}
public static final Parcelable.Creator<Emp2> creator = new Creator<Emp2>() {
@Override
public Emp2[] newArray(int size) {
return new Emp2[size];
}
@Override
public Emp2 createFromParcel(Parcel source) {
Emp2 emp2 = new Emp2();
//讀取的順序要和上面寫出的順序一致
//讀取name
emp2.name = source.readString();
emp2.age = source.readInt();
return emp2;
}
};
}
傳遞對(duì)象:方式和序列化相同:
Intent intent = new Intent(this,SecondActivity.class);
intent.putExtra("obj", new Emp2());
startActivity(intent);
獲取對(duì)象:
3、區(qū)別
Serializable在序列化的時(shí)候會(huì)產(chǎn)生大量的臨時(shí)變量,從而引起頻繁的GC。因此,在使用內(nèi)存的時(shí)候,Parcelable 類比Serializable性能高,所以推薦使用Parcelable類。
Parcelable不能使用在要將數(shù)據(jù)存儲(chǔ)在磁盤上的情況,因?yàn)镻arcelable不能很好的保證數(shù)據(jù)的持續(xù)性在外界有變化的情況下。盡管Serializable效率低點(diǎn), 也不提倡用,但在這種情況下,還是建議你用Serializable 。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹
- 在Android中通過Intent使用Bundle傳遞對(duì)象的使用方法
- Android中Intent傳遞對(duì)象的3種方式詳解
- 詳解Android中Intent傳遞對(duì)象給Activity的方法
- Android開發(fā)中Intent傳遞對(duì)象的方法分析
- Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable
- Android中使用Intent在Activity之間傳遞對(duì)象(使用Serializable或者Parcelable)的方法
- Android系列之Intent傳遞對(duì)象的幾種實(shí)例方法
- Android Intent傳遞對(duì)象的兩種方法(Serializable,Parcelable)詳細(xì)介紹
相關(guān)文章
Android實(shí)現(xiàn)選項(xiàng)菜單子菜單
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)選項(xiàng)菜單子菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
快速關(guān)閉android studio的自動(dòng)保存功能教程
這篇文章主要介紹了快速關(guān)閉android studio的自動(dòng)保存功能教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Android實(shí)現(xiàn)藍(lán)牙客戶端與服務(wù)器端通信示例
這篇文章主要介紹了Android實(shí)現(xiàn)藍(lán)牙客戶端與服務(wù)器端通信示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
Android ProgressBar直線進(jìn)度條的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了android progressbar直線進(jìn)度條的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼
這篇文章主要介紹了Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Android5.0之Activity的轉(zhuǎn)場(chǎng)動(dòng)畫的示例
本篇文章主要介紹了Android5.0之Activity的轉(zhuǎn)場(chǎng)動(dòng)畫的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10

