1. 程式人生 > >Parcelable序列化傳送資料與技巧

Parcelable序列化傳送資料與技巧

前言

Android開發中在activity之間傳輸資料應該是經常碰到的,如整數,字串等等。但是假如我們要傳輸一個類呢?

簡單的講就是把資料放到共享記憶體中,這樣其他多個程序就都可以從這個記憶體中訪問。

可能有人說為什麼不用Serializable進行序列化?一個字快,Parcelable比Serializable快很多按照goole工程師的說法快10倍

序列化

public class ParcelableTest implements Parcelable{
    private String name;
    private String id;
    private int num;
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {

    }
}

假如我們要傳輸一個ParcelableTest類 首先我們要新增Parcelable介面並且新增介面要實現的方法

describeContents 和 writeToParcel方法
@Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.id);
        dest.writeInt(this.num);
    }

    public ParcelableTest() {
    }

    protected ParcelableTest(Parcel in) {
        this.name = in.readString();
        this.id = in.readString();
        this.num = in.readInt();
    }

    public static final Creator<ParcelableTest> CREATOR = new Creator<ParcelableTest>() {
        @Override
        public ParcelableTest createFromParcel(Parcel source) {
            return new ParcelableTest(source);
        }

        @Override
        public ParcelableTest[] newArray(int size) {
            return new ParcelableTest[size];
        }
    };

重寫這2個方法。好了這樣類的序列化完成了。接下來在activity之間傳輸

MainActivity

        ParcelableTest test=new ParcelableTest();
        Bundle bundle=new Bundle();
        bundle.putParcelable("testkey",test);
        Intent intent=new Intent(MainActivity.this,Test.class);
        intent.putExtras(bundle);
        startActivity(intent);

Test

Intent intent=getIntent();
ParcelableTest parcelableTest=(ParcelableTest) intent.getParcelableExtra("testkey");

使用外掛快速序列化

假如要傳輸的類屬性很多怎麼辦或者你要序列化很多類怎麼辦,當然有辦法,我們的前輩們早想到了這個問題。使用外掛能夠讓我們快速序列化。

開啟Android Studio

file->settings->Plugins->Browse repositroes..然後在搜尋框子、中輸入Parcelable

選擇Android Parcelable code generator進行安裝 安裝完成後重啟AS

在你要序列化的類中 快捷鍵 Alt+Insert 在彈出的Generator中選擇Paecelable 然後選擇所有屬性就可以進行快速序列化了