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,影响效率;
本篇文章没有叙述严格定义,其中的严格概念今后会在的文章中具体阐明。
Android开发中JavaBean类和序列化知识的理解的更多相关文章
- Android开发中Context类的作用以及Context的详细用法
Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大 ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- android开发中关于继承activity类中方法的调用
android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- 最全Android开发常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括 HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...
- Android开发中Parcelable接口的使用方法
在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Par ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- 在android开发中使用multdex的方法-IT蓝豹为你整理
Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
随机推荐
- 详解Redis Cluster集群
Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构达到负载 ...
- Android Handler消息机制源码解析
好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个 ...
- poj2186【利用强连通分量】
题意: 有n头奶牛,然后有个规则是A->B,B->C,那么A->C: A觉得B受欢迎,B觉得C受欢迎,那么A觉得C受欢迎: 求:被其他所有牛都欢迎的牛的数量: 思路: 原来的思路: ...
- bzoj 3613: [Heoi2014]南园满地堆轻絮【二分+贪心】
二分答案w,然后判断的时候维护一个mx,扫描序列,先更新mx=max(mx,a[i]-w),然后如果a[i]+w<mx的话就是说这个位置即使升到极限并且前面降到极限也不能符合条件了 #inclu ...
- Eclipse新建Maven webapp项目错误的解决方法
新建webapp项目时出现如下错误: 解决步骤如下: 1. 右键点击项目,选择Properties,点击Java Build Path,将默认的JRE移除,点击右侧add Library,选择JRE ...
- SpringBoot整合Spring Data Solr
此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <depe ...
- Centos 6.x 搭建 Zabbix Server
zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让 ...
- SpringMVC-核心配置文件spring-mvc.xml
@Spring-MVC.xml @MVC的注解驱动 Bean模式 上面源码的配置我们看到了,其中映射器和适配器的注解模式是过时的所以我们需要重新配置一下. <!-- 配置处理器映射器 --> ...
- PT2264解码心得
PT2264解码心得 最近闲暇时间在琢磨无线RF解码程序,正好在数码之家论坛中翻出大佬的解码程序(http://bbs.mydigit.cn/read.php?tid=245739),于是乎,慢慢学习 ...
- toLocaleSting()
之前一直忽略了这一方法,直到前天的笔试题,两种方式实现如下功能... 1234567890→1,234,567,890 当时我的思路是这样的:1.字符串反转,插入逗号,再反转 2.求余数,将字符串一分 ...