2017-05-05 70 views
2

我有以下實施Parcelable類:parcelable中的parcel讀/寫操作時可變順序是否有問題?

public class DemoModel implements Parcelable { 
    private String para1; 
    private int para2; 

    public DemoModel(){} 

    protected DemoModel(Parcel in) { 
     para1 = in.readString(); 
     para2 = in.readInt(); 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(para1); 
     parcel.writeInt(para2); 
    } 

    //other methods 
} 

它是重要的,同時寫入/讀取到包裹維持秩序?爲什麼?

+0

語法,刪除「android」,因爲它是通過標籤指定的 – mach

回答

3

是它實現。寫入變量的順序取決於您,您可以根據自己的需要進行操作,但必須按照相同的順序讀取它們。如果訂單會有所不同,它會給您造成運行時崩潰。

爲什麼?機制是盲目的,所以它相信你以正確的順序得到它。 主要是爲了提高性能,因爲它不必搜索特定的元素。 您可以在Parcelable接口中看到它創建的數組大小與包含的許多元素的大小相同。

public interface Creator<T> { 
    /** 
    * Create a new array of the Parcelable class. 
    * 
    * @param size Size of the array. 
    * @return Returns an array of the Parcelable class, with every entry 
    * initialized to null. 
    */ 
    public T[] newArray(int size); 
} 
0

根據this source

的一個非常重要的事情要密切關注的是,你寫和讀你的價值,並從包裹的順序。他們需要在兩種情況下匹配。

它的方式parcelable造成由它的創作者