Android知識點總結(九)Intent可以傳遞哪些資料型別
相關文章:
Intent傳遞資料時,下列的資料型別哪些可以被傳遞(abcd)(多選)
A、Serializable B、charsequence C、Parcelable D、Bundle
除了上面的還能傳遞基本資料型別(byte/boolean/char/short/int/float/long/double)、String/StringBuffer/StringBuilder型別
Serializable :將 Java 物件序列化為二進位制檔案的 Java 序列化技術是 Java系列技術中一個較為重要的技術點,在大部分情況下,開發人員只需要瞭解被序列化的類需要實現 Serializable 介面,使用ObjectInputStream 和 ObjectOutputStream 進行物件的讀寫。
charsequence :
在JDK1.4中,引入了CharSequence介面,實現了這個介面的類有:CharBuffer、String、StringBuffer、StringBuilder這個四個類。
CharBuffer為nio裡面用的一個類,String實現這個介面理所當然,StringBuffer也是一個CharSequence,StringBuilder是Java抄襲C#的一個類,基本和StringBuffer類一樣,效率高,但是不保證執行緒安全,在不需要多執行緒的環境下可以考慮。
提供這麼一個介面,有些處理String或者StringBuffer的類就不用過載了。但是這個介面提供的方法有限,只有下面幾個:charat、length、subSequence、toString這幾個方法,感覺如果有必要,還是過載的比較好,避免用instaneof這個操作符。
Parcelable :
Android提供了一種新的型別:Parcel。本類被用作封裝資料的容器,封裝後的資料可以通過Intent或IPC傳遞。 除了基本型別以
外,只有實現了Parcelable介面的類才能被放入Parcel中。
是GOOGLE在安卓中實現的另一種序列化,功能和Serializable相似,主要是序列化的方式不同
利用Parcelable介面實現資料通過Intent/Bundle進行傳遞
public class PersonInfo implements Parcelable
{
public String iName; // 人名
publicint iSex; // 性別
public String iId; // 身份證號碼
public String iMobileNumber; // 手機號碼
public String iEMailAddr; // 郵箱地址
// From Parcelable
@Override
publicint describeContents()
{
return0;
}
// From Parcelable
// 儲存到包裹中
@Override
publicvoid writeToParcel(Parcel dest, int flags)
{
dest.writeString(iName);
dest.writeInt(iSex);
dest.writeString(iId);
dest.writeString(iMobileNumber);
dest.writeString(iEMailAddr);
}
// 實現Parcelable介面的型別中,必須有一個實現了Parcelable.Creator介面的靜態常量成員欄位,
// 並且它的名字必須為CREATOR的
publicstaticfinal Parcelable.Creator<PersonInfo> CREATOR
=new Parcelable.Creator<PersonInfo>()
{
// From Parcelable.Creator
@Override
public PersonInfo createFromParcel(Parcel in)
{
PersonInfo brief =new PersonInfo();
// 從包裹中讀出資料
brief.iName = in.readString();
brief.iSex = in.readInt();
brief.iId = in.readString();
brief.iMobileNumber = in.readString();
brief.iEMailAddr = in.readString();
return brief;
}
// From Parcelable.Creator
@Override
public PersonInfo[] newArray(int size)
{
returnnew PersonInfo[size];
}
};
}
Bundle:Bundle是將資料傳遞到另一個上下文中或儲存或回覆你自己狀態的資料儲存方式。它的資料不是持久化狀態。