serializable和Parcelable

1.首先搞清楚为什么要序列化: 为了传递对象;

因为intent要想传递对象的话,那么这个对象一定是实现了Serializable或Parcelable接口的;

 

2.他们俩有啥区别呢:

   Serializable是Java自带的,将一个对象传化成可传输或可存储的状态,可以用于网络传输,以及本地存储等;

 

 Parcelable是专门为Android服务的,是将一个完整的对象分解,每一部分都是Intent所支持的传输类型,这样就能达到传输对象的目的了;Parcelable能达到永久性的保存对象到本地文件,也能实现网络传输对象;


 

 

 

下面举一个Serializable的例子:

原理(通过write方法序列化,read方法反序列化;Parcelable也是如此):

serializable和Parcelable

 

 

(人不去指定,默认情况下)***:原则上序列化后的***和之前的***相同才能正常的被反序列化;

注意一点:应该手动指定***,因为如果类的结构发生改变,尽管还是符合上面的原则,但反序列化还是会失败,因为类结构已经发生了改变

 

首先创建一个实现了Serializable接口的一个对象;(里面很多方法都采用了JavaBean的形式)

serializable和Parcelable

 

然后就可以在Intent中传递这个实现了Serializable接口的对象了:

serializable和Parcelable

接收对象的那端是怎么实现的?

serializable和Parcelable

 

 

Parcelable:

原理:通过writetoparcel()方法来序列化,CREATOR中反序列化;

 

serializable和Parcelable

serializable和Parcelable

 

然后也是一样,在intent中发送实现了Parcelable接口的对象;

serializable和Parcelable

最后接受intent的类中:

serializable和Parcelable

 

 

   选择序列化的原则

Serializable简单,Parcelable复杂但是效率高,而且内存使用性能更好):

①.在内存方面尽量选择Parcelable,因为Serializable序列化会大量的产生临时变量,这样会频繁的GC造成卡顿;

②.一般情况下,用Parcelable;它效率高,但是无法做到数据持久化;所以存储数据或者网络传输要用Serializable;