Androidラーニング-エンティティクラスのparcelableシーケンス化
2157 ワード
筆者はページジャンプを行う際に、エンティティクラスを渡すが、このエンティティクラスにはbitmap属性があり、このオブジェクトを渡すタイミングが間違っており、資料を照会した後、エンティティクラスをシーケンス化する必要があることに気づいた.シーケンス化には、次の2つの方法があります.
最初はSerializableインタフェースを使用しています.このインタフェースはJava SE自体がサポートしているシーケンス化インタフェースですが、このインタフェースを使用してIntentデータの伝達を行うには欠点があります.このシーケンス化と逆シーケンス化では、多くのI/O操作が必要となるため、オーバーヘッドが大きく効率的ではありません. の2つ目はParcelableインタフェースの使用、すなわち本論文の主なポイントである.この方式はAndroidでサポートされているシーケンス化方式で、使用するのは少し面倒ですが、効率が高いので、Intentを通じてデータを伝達するために一般的に使用されています.
1つ目の方法はクラスの後ろにimplements Serializableを加えるだけでよいが,筆者は実現過程で一部の問題しか解決できないのか,それとも2つ目の方法がより実現できるのかを発見した.ここではいろいろなタイプがそろっていて、比較的参考にすることができます.コードを貼り付けます.
1つ目の方法はクラスの後ろにimplements Serializableを加えるだけでよいが,筆者は実現過程で一部の問題しか解決できないのか,それとも2つ目の方法がより実現できるのかを発見した.ここではいろいろなタイプがそろっていて、比較的参考にすることができます.コードを貼り付けます.
public class Worker implements Parcelable {
public String name;
public int age;
public Programmer programmer;
public ArrayList pros = new ArrayList();
public Bitmap icon;
public Designer designer;
public Worker() {}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeString(name);
out.writeInt(age);
out.writeParcelable(programmer, flags);
out.writeList(pros);
out.writeParcelable(icon, flags);
out.writeSerializable(designer);
}
public static final Parcelable.Creator CREATOR
= new Parcelable.Creator() {
public Worker createFromParcel(Parcel in) {
return new Worker(in);
}
public Worker[] newArray(int size) {
return new Worker[size];
}
};
private Worker(Parcel in) {
name = in.readString();
age = in.readInt();
programmer = in.readParcelable(Programmer.class.getClassLoader()); // ClassLoader null
pros = in.readArrayList(Programmer.class.getClassLoader()); // ClassLoader null
icon = in.readParcelable(null); // null
designer = (Designer) in.readSerializable();
}
}