Serializable和Parcelable的区别和选择

来源:互联网 发布:淘宝金币流量 编辑:程序博客网 时间:2024/05/18 18:01

写博客,据前辈们说是一种很有效的提升自我技术的手段。一方面可以在忘记的时候,起到笔记的作用,一方面写出自己的体会和启发。坚持每周至少一篇,相信自己一定可以坚持下来!第一篇,就从基础开始写起。

Serializable和Parcelable,两个序列化接口。之前在项目中有碰到Activity的通信问题,需要往购物车中传递一个商品的集合。Activity之间的通信方式,无非这几种:Bundle 、公有的静态变量、网络、文件。第一时间想到使用Bundle,比较方便。可是试来试去,好像怎么都不行。我知道基本类型数据是没问题的,对象类型数据需要实现序列化接口。最后还是没能成功。。转而使用static 修饰的list,可是总感觉这样不好。今天决定好好研究一下这个问题,最后通过实现Serializable搞定了。说来可笑,看代码: 


当时就是少了强转这一步。。。在另一个接收数据的Activity


再强转回来,然后就OK了。

然后我依稀记得Serializable是重量级的,在内存消耗上更严重一些,于是打算再使用Parcela接口实现。

看代码:

主要是Person类的变化较大。首先要实现两个方法

然后构建自定义的Parcelable对象。实现2个未实现方法。写法比较固定。


数据传递的代码:


获取数据:


总结一下

1、作用

Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。

从上面的设计上我们就可以看出优劣了。

2、效率及选择

Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化

Serializable是java提供的,而Parcelable是Android专门为应用中数据的传递打造的,可想而知二者该如何选择。




0 0