導航:首頁 > 操作系統 > androidparcel對象

androidparcel對象

發布時間:2022-07-31 10:27:42

android parcelable newarray有什麼用

參考如下內容:
android中還有一種特有的序列化方法,那就是實現Parcelable介面,使用這種方式來序列化的效率要高於實現Serializable介面。不過Serializable介面實在是太方便了,因此在某些情況下實現這個介面還是非常不錯的選擇。
使用Parcelable步驟:
1.實現Parcelable介面
2.實現介面中的兩個方法
public int describeContents();
public void writeToParcel(Parcel dest, int flags);1212

第一個方法是內容介面描述,默認返回0就可以了
第二個方法是將我們的對象序列化一個Parcel對象,也就是將我們的對象存入Parcel中
3.實例化靜態內部對象CREATOR實現介面Parcelable.Creator,實例化CREATOR時要實現其中的兩個方法,其中createFromParcel的功能就是從Parcel中讀取我們的對象。

② android parcelable有沒有限制大小

androidintent傳遞數據是沒有數量限制的,但是Parcelable是將數據存到內存中的ROM中,數量是沒有限制的,但是一個android應用進程最大使用16MB的內存。Intent是一種運行時綁定(run-timebinding)機制,它能在程序運行過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來完成請求。比如,有一個Activity希望打開網頁瀏覽器查看某一網頁的內容,那麼這個Activity只需要發出WEB_SEARCH_ACTION給Android,Android就會根據Intent的請求內容,查詢各組件注冊時聲明的IntentFilter,找到網頁瀏覽器的Activity來瀏覽網頁。在Android中實現Parcelable介面的類可以支持序列與反序列化,以下是一個實現的舉例:1.實現Parcelable介面2.添加實體屬性3.覆寫writeToParcel(Parceldest,intflags)方法,指定寫入Parcel類的數據。4.創建Parcelable.Creator靜態對象,有兩個方法createFromParcel(Parcelin)與newArray(intsize),前者指定如何從Parcel中讀取出數據對象,後者創建一個數組。5.覆寫describeContents方法,默認返回0。

③ android 為什麼引入parcelable

1. Parcelable介面
Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing theParcelable.Creator interface。
2.實現Parcelable就是為了進行序列化,那麼,為什麼要序列化?
1)永久性保存對象,保存對象的位元組序列到本地文件中;
2)通過序列化對象在網路中傳遞對象;
3)通過序列化在進程間傳遞對象。

④ Android Parcelable和Serializable的區別

本文主要介紹Parcelable和Serializable的作用、效率、區別及選擇,關於Serializable的介紹見java 序列化的高級認識。

1、作用
Serializable的作用是為了保存對象的屬性到本地文件、資料庫、網路流、rmi以方便數據傳輸,當然這種傳輸可以是程序內的也可以是兩個程序間的。而Android的Parcelable的設計初衷是因為Serializable效率過慢,為了在程序內不同組件間以及不同Android程序間(AIDL)高效的傳輸數據而設計,這些數據僅在內存中存在,Parcelable是通過IBinder通信的消息的載體。
從上面的設計上我們就可以看出優劣了。

2、效率及選擇
Parcelable的性能比Serializable好,在內存開銷方面較小,所以在內存間數據傳輸時推薦使用Parcelable,如activity間傳輸數據,而Serializable可將數據持久化方便保存,所以在需要保存或網路傳輸數據時選擇Serializable,因為android不同版本Parcelable可能不同,所以不推薦使用Parcelable進行數據持久化

3、編程實現
對於Serializable,類只需要實現Serializable介面,並提供一個序列化版本id(serialVersionUID)即可。而Parcelable則需要實現writeToParcel、describeContents函數以及靜態的CREATOR變數,實際上就是將如何打包和解包的工作自己來定義,而序列化的這些操作完全由底層實現。
Parcelable的一個實現例子如下
[java] view plain print?
public class MyParcelable implements Parcelable {
private int mData;
private String mStr;

public int describeContents() {
return 0;
}

// 寫數據進行保存
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
out.writeString(mStr);
}

// 用來創建自定義的Parcelable的對象
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}

public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};

// 讀數據進行恢復
private MyParcelable(Parcel in) {
mData = in.readInt();
mStr = in.readString();
}
}
public class MyParcelable implements Parcelable {
private int mData;
private String mStr;

public int describeContents() {
return 0;
}

// 寫數據進行保存
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
out.writeString(mStr);
}

// 用來創建自定義的Parcelable的對象
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}

public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};

// 讀數據進行恢復
private MyParcelable(Parcel in) {
mData = in.readInt();
mStr = in.readString();
}
}

從上面我們可以看出Parcel的寫入和讀出順序是一致的。如果元素是list讀出時需要先new一個ArrayList傳入,否則會報空指針異常。如下:
list = new ArrayList<String>();
in.readStringList(list);

PS: 在自己使用時,read數據時誤將前面int數據當作long讀出,結果後面的順序錯亂,報如下異常,當類欄位較多時務必保持寫入和讀取的類型及順序一致。
11-21 20:14:10.317: E/AndroidRuntime(21114): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@4126ed60: Unmarshalling unknown type code 3014773 at offset 164

4、高級功能上
Serializable序列化不保存靜態變數,可以使用Transient關鍵字對部分欄位不進行序列化,也可以覆蓋writeObject、readObject方法以實現序列化過程自定義

⑤ android parcelable序列化怎麼用

一序列化原因:
1.永久性保存對象,保存對象的位元組序列到本地文件中;
2.通過序列化對象在網路中傳遞對象;
3.通過序列化在進程間傳遞對象。

二 至於選取哪種可參考下面的原則:
1.在使用內存的時候,Parcelable 類比Serializable性能高,所以推薦使用Parcelable類。
2.Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC。
3.Parcelable不能使用在要將數據存儲在磁碟上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點, 也不提倡用,但在這種情況下,還是建議你用Serializable 。

實現:
1 Serializable 的實現,只需要繼承 implements Serializable 即可。這只是給對象打了一個標記,系統會自動將其序列化。

2 Parcelabel 的實現,需要在類中添加一個靜態成員變數 CREATOR,這個變數需要繼承 Parcelable.Creator 介面。

public class MyParcelable implements Parcelable {
private int mData;

public int describeContents() {
return 0;
}

public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}

public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}

public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};

private MyParcelable(Parcel in) {
mData = in.readInt();
}
}

⑥ java android 實現parcelable序列化,為什麼必須要實現CREATOR

你好:
Android序列化對象主要有兩種方法,實現Serializable介面、或者實現Parcelable介面。實現Serializable介面是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比實現Serializable介面高,而且還可以用在IPC中。實現Serializable介面非常簡單,聲明一下就可以了,而實現Parcelable介面稍微復雜一些,但效率更高,推薦用這種方法提高性能。下面就介紹一下實現Parcelable介面的方法
通過實現Parcelable介面序列化對象的步驟:
1、聲明實現介面Parcelable
2、實現Parcelable的方法writeToParcel,將你的對象序列化為一個Parcel對象
3、實例化靜態內部對象CREATOR實現介面Parcelable.Creator:
Java代碼
public static final Parcelable.Creator<T> CREATOR

其中public static final一個都不能少,內部對象CREATOR的名稱也不能改變,必須全部大寫。
4、完成CREATOR的代碼,實現方法createFromParcel,將Parcel對象反序列化為你的對象

簡而言之:通過writeToParcel將你的對象映射成Parcel對象,再通過createFromParcel將Parcel對象映射成你的對象。也可以將Parcel看成是一個流,通過writeToParcel把對象寫到流裡面,在通過createFromParcel從流里讀取對象,只不過這個過程需要你來實現,因此寫的順序和讀的順序必須一致。

Parcel對象可以通過以下方法寫入或讀取byte, double, float, int, long, String這6種類型變數。

⑦ android parcelable對象中有集合怎麼寫

請看例子:

{

publicintstaff;

publicinttype;

publicGoodsgoods[];

publicList<Goods>arrgoods;

@Override

publicintdescribeContents(){

return0;

}

@Override

publicvoidwriteToParcel(Parceldest,intflags){

dest.writeInt(staff);

dest.writeInt(type);

dest.writeParcelableArray(goods,flags);

}

@SuppressWarnings("unused")

publicstaticfinalParcelable.CreatorCREATOR=newParcelable.Creator(){

@Override

publicBillcreateFromParcel(Parcelin){

returnnewBill(in);

}

@Override

publicBill[]newArray(intsize){

returnnewBill[size];

}

};

}

順便推薦一款學習android的利器:

android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼:

閱讀全文

與androidparcel對象相關的資料

熱點內容
51單片機匯編語言指令 瀏覽:133
女程序員好難 瀏覽:683
三田壓縮機與電裝 瀏覽:708
重生細胞安卓版沒鍵盤怎麼玩 瀏覽:994
小米nfc手機刷加密卡 瀏覽:290
linux如何下載文件 瀏覽:808
linuxrpm依賴 瀏覽:370
匯率pdf 瀏覽:353
帶分數的演算法思維 瀏覽:115
如何讓伺服器支持asp文件 瀏覽:48
python網站自動簽到腳本 瀏覽:888
程序員和語言框架哪個重要 瀏覽:776
文件伺服器上面有什麼 瀏覽:383
需求不清是程序員面臨的真正挑戰 瀏覽:952
放療有關的演算法 瀏覽:750
java和python交互 瀏覽:648
貴州網路伺服器機櫃雲主機 瀏覽:267
未來番禺程序員待遇 瀏覽:213
安卓安智部落沖突密碼怎麼改 瀏覽:648
http協議單片機 瀏覽:75