Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?

本文主要是介绍Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Serializable 接口

Parcelable接口

内存中使用 Parcelable

持久化使用 Serializable

总结


谈谈Serializable 接口和Parcelable 接口的区别?
那么谈到这样的问题呢,我们平时在android 的开发过程中,那么主要用到的序列化手段,也就是这两种方式。
 

Serializable 接口

那么第一种方式是Serializable 接口,那么它是序列化的意思。这个单词本身就是序列化的意思。
它主要是java 中自带的,那么它表示将一个对象转换成可存储或可传输的状态。
那么序列化以后的对象可以在网络上进行传输,也可以存储到本地。

那么一般来说我们平时在使用过程中,更多的情况我们会使用 Serializable 来进行数据持久化的操作。

Parcelable接口

那么在安卓中呢,提出了 Parcelable 这样的序列化工具。
在我们安卓中这个 Parcelable 序列化这个工具,不同于之前的我们的Serializable。

其主要的一个最重要的部分。就是它用于分解后的每一部分,它对我们一个对象进行分解。那么在分解以后呢,它的每一部分都是 intent 所支持的所有的数据类型。

那么这样呢,也就实现了传递对象这样的功能了。
当然他要做持久化也是可以做的。但是他持久化这个方面呢有很多弊端。

  

那么这里呢,我们可以一起来看一下我们选择序列化方法的这个原理。
我们怎么去选择这两种不同的序列化呢?

内存中使用 Parcelable

如果说我们在使用内存情况下,使用内存来进行序列化传输的时候,我们使用 Parcelable 它会比 Serializable 的性能会要高。所以我们推荐使用 Parcelable。那么主要原因:是因为它是对一个对象进行分解,并且分解以后它每一部分内容 intent 都是可以支持的数据类型。

持久化使用 Serializable

那么我们的 Serializable 呢?
它更趋向于使用一种二进制的方式进行一个序列化的动作。那么 Serializable 它在序列化的时候会产生大量的临时变量,那么从这个中间呢,它会引起频繁 GC 的操作。

所以我们在内存中,比方说我们从 activity a 传一个对象到 activity b 的过程中。那么这个对象传输过程中,如果你去使用 Serializable,你会发现:会有很多临时变量产生。那么这样的话,它的性能相对就会较低一些。所以我们会考虑,只要是在程序中进行对象的传输,需要序列化的地方,我们都使用Parcelable, 那么这是在安卓这一块的。

好,那么如果说我们在持久化时,那么在持久化的过程中呢?
Serializable 它的持久化占用的存储空间,会比 Parcelable 要小一些,那么它是直接转换成我们的二进制的方式
那么在反序列化的过程中,我们的 Serializable 它也不会因为对象的增减字段,而造成这种反序列化的失败。

总结

所以我们一般来说在持久化对象的时候,会建议大家使用是Serializable。那么并且它存在我们的文件中,那么这个占用的磁盘空间也会更小一些。虽然说它的性能没有我们的 Parcelable 那么高。

所以 Parcelable 这种序列化方式主要用在内存使用情况,而我们的 Serializable 呢主要用在持久化这种情况。

Serializable 它在序列化的时候会产生大量的临时变量,可能会引起频繁 GC 的操作,消耗内存,性能相对就会较低一些。所以内存中使用Parcelable

Serializable 它的持久化占用的存储空间,会比 Parcelable 要小一些,它是直接转换成我们的二进制的方式。
那么在反序列化的过程中,我们的 Serializable 它也不会因为对象的增减字段,而造成这种反序列化的失败。

这篇关于Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292552

相关文章

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法