在Parcelable中包裹读/写操作时,变量顺序是否重要?

我有一个Parcelable类的以下实现:

 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 } 

写入/读取包裹时维持秩序是否重要? 为什么?

是的确如此 。 写入变量的顺序取决于您,您可以根据需要执行此操作,但必须以相同的顺序读取它们。 如果订单不同,它会给你运行时崩溃。

为什么? 机制是盲目的,所以它相信你能以正确的顺序获得它。 主要是为了性能优势,因为它不必搜索特定元素。 您可以在Parcelable界面中看到,它创建的数组大小为您放入parcel中的多个元素。

 public interface Creator { /** * 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); } 

根据这个消息来源 :

需要密切关注的一件非常重要的事情是您在Parcel中编写和读取值的顺序。 他们需要在两种情况下都匹配。

它是由其创建者实现parcelable的方式引起的