可执行的实现主要有两个过程步骤。
1将您的java对象写入包含两种方法的包裹。
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(cityName);
dest.writeString(macroName);
dest.writeString(id);
}
其中描述的内容是为您的内容设置标志。大部分时间你只需要它不变。
public void writeToParcel(Parcel dest,int flags),您需要根据JAVA类中的字段逐步将您的Java类对象编写为包。在上面的例子中,我的课有三个字符串。您可以在宗地中编写几乎所有类型的对象。你只需要选择适当的一个。像writeString(),写列表()或writeObject()等
2.第二部分是从包裹
阅读Java对象的回报,这部分需要两件事情为好。首先是你的Java类的CREATOR如下
public static final Creator<City> CREATOR = new Creator<City>() {
@Override
public City createFromParcel(Parcel in) {
return new City(in);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
在上面的例子中,我的Java类是City。它从包裹中读取城市对象。但它叫城市类的新市(中)的构造函数。所以现在我需要一个构造函数来接受参数中的parcel对象。让我们创造这个..
protected City(Parcel in) {
cityName = in.readString();
macroName = in.readString();
id = in.readString();
}
现在我们做一个类完整的充分证明parcelable。有一点需要注意,我们需要在受保护的城市(包裹)中读取相同顺序的成员,我们将它们放入包裹中,即写入到writeToParcel()方法中。
关于如何重现badParcelable exeption中简单地让android从parcelable创建java对象。为此,您可以选择从Android设备上的开发人员选项中销毁活动,并将您的应用程序放在该活动的后台中,以便Android终止您的应用程序进程ID。通过重新创建活动(onCreate + Bundle)来恢复您的应用程序,如果您未正确实施parcelable,则会发生该异常。
我在显示如何使用parcelable的问题中添加了一个片段。你可以看看,也许这就是我使用它是错的? –
@AdrianHristov:最终,'Bundle'可以放入'Parcel'中,并通过进程边界发货。在这种情况下,我不确定何时。我们知道它发生了,就像Android在后台中终止你的进程一样,但是用户在离开它后很快返回到你的应用程序(例如30秒),我们的状态得到恢复,唯一可行的方法是如果我们的状态处于核心操作系统进程(而不是刚刚终止的进程)。 – CommonsWare