Android开发中JavaBean类和序列化知识的理解

原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/6296121.html                      

 

Android开发中,我们经常用到JavaBean类以及序列化的知识,但经常用并不代表能够深入理解,

今天我希望来总结一下JavaBean类和序列化知识,以便让自己理解的更加深入。

 

首先说一下JavaBean类,我们在Android开发中对JavaBean类的概念没有非常严格,在JSP开发中,Bean类

有相对严格的规范,这里http://wiki.netbeans.org/NetBeansJavaBeansTutorial,是Wiki上SUN公司的

一些定义,比如一些命名的规则,必须有一个空的构造方法等等规定,有些Bean类的规范还要求必须实现序列

化。但我们在Java开发中使用到的Bean类并没有那么严格,这是因为用途不同。我们在Android开发中使用Bean

类最多的场景是从网络获取数据,将数据以Bean类组织,Bean类中的数据用于填充UI界面中的控件。此处使用

Bean类主要是组织数据方便,便于将其中的数据填充到控件中

 

再说一下序列化,序列化的作用是①将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;

②按值将对象从一个应用程序域发送至另一个应用程序域或者进行网络传输。

Android中的对象序列化的过程是将对象转化为字节数组,反序列化就是将字节数组重新恢复成对象。

我们在Android开发中,一般在Bundle,intent传递Bean类对象(或包含Bean类的集合)时,需要进行序列化;

在IPC机制中也用到了Bean类的序列化。注意,传递的Bean类对象,并不是原对象本身,而是原对象的复制,

两者的地址不一样,但其他值是一样的。当在不同Activity见传递对象时,因为不是传递的原对象的引用,从而

避免了内存泄漏。

 

我们再用通俗一些的语言说一下序列化的作用:

①就是将对象的状态保存在磁盘上,当程序不运行时,该状态不消失,下次程序运行时读取该状态,恢复对象,

更直白一些,就是保存。当然保存的方法有很多很多种,这个只是一种,且主要针对实体类;

②在Activity之间,Activity和Fragment之间,进程间,传递对象,或者网络传递对象,这个时候传递的是序

列化后的Byte数组,也就是方便传输,不易出错,不同程序间兼容性更好;

 

可看到有人这样理解序列化的作用:

也就是换个时间,换个地点使用对象信息

换个时间,就是先将对象信息存盘,等需要的时候再次读取,说的是同一个Activity或者Fragment对Bean类信息的使用;

换个地点,也就是不同Activity或者Fragment,或者不同进程,甚至不同程序对Bean类信息的使用。

 

两种序列化的区别:

①实现Serializable接口由JavaSE支持,而实现Parcelable接口是Android特有的。实现Parcelable比实现Serializable

效率高,但用法稍微复杂;

②实现Serializable接口,只需要我们标记一下,系统自动将对象序列化;实现Parcelable接口,还需要实例化静态内部

变量CREATOR,需要我们操作辅助实现序列化;

③在使用内存的时候,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据;

④在永久化保存对象的时候,Serializable可以实现,所以在需要保存或网络传输数据时选择Serializable。

Parcelable不能用在需要将对象存储在磁盘的情况下,且因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化;

⑤Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,影响效率;

 

本篇文章没有叙述严格定义,其中的严格概念今后会在的文章中具体阐明。

 

posted @ 2017-01-19 12:04  chironmy  阅读(6021)  评论(0编辑  收藏  举报