Androidラーニング-エンティティクラスのparcelableシーケンス化

2157 ワード

筆者はページジャンプを行う際に、エンティティクラスを渡すが、このエンティティクラスにはbitmap属性があり、このオブジェクトを渡すタイミングが間違っており、資料を照会した後、エンティティクラスをシーケンス化する必要があることに気づいた.シーケンス化には、次の2つの方法があります.
 
  • 最初はSerializableインタフェースを使用しています.このインタフェースはJava SE自体がサポートしているシーケンス化インタフェースですが、このインタフェースを使用してIntentデータの伝達を行うには欠点があります.このシーケンス化と逆シーケンス化では、多くのI/O操作が必要となるため、オーバーヘッドが大きく効率的ではありません.
  • の2つ目はParcelableインタフェースの使用、すなわち本論文の主なポイントである.この方式はAndroidでサポートされているシーケンス化方式で、使用するのは少し面倒ですが、効率が高いので、Intentを通じてデータを伝達するために一般的に使用されています.

  •  
    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();  
        } 
    }