Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之Serializable 和 Parcelable的區別(源代碼分享)

Android開發之Serializable 和 Parcelable的區別(源代碼分享)

編輯:關於Android編程

android 中自定義的對象序列化的問題有兩個選擇一個是Parcelable,另外一個是Serializable。

一 序列化原因:

1.永久性保存對象,保存對象的字節序列到本地文件中;
2.通過序列化對象在網絡中傳遞對象;
3.通過序列化在進程間傳遞對象。

二 至於選取哪種可參考下面的原則:

1.在使用內存的時候,Parcelable 類比Serializable性能高,所以推薦使用Parcelable類。
2.Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
3.Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點, 也不提倡用,但在這種情況下,還是建議各位可以用Serializable 。

Serializable 的實現,只需要繼承 implements Serializable 即可。這只是給對象打了一個標記,系統會自動將其序列化。

Parcelable的實現需要以下步驟

(1)describeContents方法。內容接口描述,默認返回0就可以;

(2)writeToParcel 方法。該方法將類的數據寫入外部提供的Parcel中.即打包需要傳遞的數據到Parcel容器保存,以便從parcel容器獲取數據,該方法聲明如下:

writeToParcel (Parcel dest, int flags)

(3)創建相應函數的構造方法

(4)靜態的Parcelable.Creator接口,本接口有兩個方法:

createFromParcel(Parcel in) 從Parcel容器中讀取傳遞數據值,封裝成Parcelable對象返回邏輯層。

newArray(int size) return new T[size])

源代碼如下

package com.example.service;

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable{
    private int age;
    private String name;
    
	public Person(Parcel in) {
		age=in.readInt();
		name=in.readString();
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		// TODO Auto-generated method stub
		dest.writeInt(age);
		dest.writeString(name);
	}
	public static final Parcelable.Creator CREATOR=new Creator() {
		
		@Override
		public Person[] newArray(int size) {
			// TODO Auto-generated method stub
			return new Person[size];
		}
		
		@Override
		public Person createFromParcel(Parcel source) {
			// TODO Auto-generated method stub
			return new Person(source) ;
		}
	};

}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved