当前位置: 代码迷 >> Android >> Android开发之Serializable 跟 Parcelable的区别(源代码分享)
  详细解决方案

Android开发之Serializable 跟 Parcelable的区别(源代码分享)

热度:36   发布时间:2016-04-28 06:04:36.0
Android开发之Serializable 和 Parcelable的区别(源代码分享)
  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<Person> CREATOR=new Creator<Person>() {				@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楼u0139008759小时前
好久没有人留言了啊
  相关解决方案