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

