首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android,如何序列化/反序列化Parcelable,它是否维护对对象实例的引用?

Android中,Parcelable是一种用于序列化和反序列化对象的接口。它允许将对象转换为字节流,以便在不同组件之间传输或存储,并在需要时重新创建对象。

Parcelable接口是Android提供的一种高效的序列化机制,相比Java中的Serializable接口,Parcelable在性能上更优。它通过将对象的数据拆分为原始数据类型进行传输,避免了Java序列化过程中的反射和IO操作,因此在性能上更高效。

在Android中,实现Parcelable接口的类需要实现以下方法:

  1. writeToParcel(Parcel dest, int flags):将对象的数据写入Parcel对象中。
  2. describeContents():返回当前对象的内容描述,一般返回0即可。
  3. CREATOR:Parcelable.Creator接口的实例,用于反序列化Parcelable对象。

Parcelable接口不会维护对对象实例的引用。在序列化和反序列化过程中,只会将对象的数据进行传输,而不会保留对象的引用。因此,在反序列化后重新创建的对象与原始对象是不同的实例。

Parcelable接口适用于需要高性能的场景,例如在Activity之间传递大量数据、在进程间传输数据等。对于需要跨进程传输的对象,Parcelable是首选的序列化方式。

腾讯云提供了一系列与Android开发相关的产品和服务,例如移动推送、移动分析、移动测试等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方文档或咨询腾讯云的客服人员。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发之漫漫长途 X——Android序列化

该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中相关知识,另外也借鉴了其他优质博客,在此向各位大神表示感谢,膜拜!!!...其实不是的,同志们还记得上两篇出现Parcel吗,Parcel是一个容器,他可以包含数据或者是对象引用,并且能够用于Binder传输。...当然如果我们没有指定,JVM会根据类信息自动生成一个UID。 被transient描述域和类静态变量是不会被序列化序列化是针对类实例。...反序列化产生对象并不是通过构造器创建,那么很多依赖于构造器保证约束条件在对象序列化时都无法保证。比如一个设计成单例类如果能够被序列化就可以分分钟克隆出多个实例......至此我们就得到了反序列化对象 ---- 本篇总结 我们本篇详细分析了Android序列化相关知识,你可以使用Java中Serializable也可以使用Parcelable

36620

Android 进阶6:两种序列化方式 Serializable 和 Parcelable

什么是序列化 我们总是说着或者听说着“序列化”,定义是什么呢? 序列化 (Serialization)将对象状态信息转换为可以存储或传输形式过程。...也就是说,一个类序列化时,运行时会保存版本号,然后在反序列化时检查你要反序列化对象版本号是否一致,不一致的话就会报错:·InvalidClassException。...接口 ParcelableAndroid 特有的序列化接口: public interface Parcelable { //writeToParcel() 方法中参数,用于标识当前对象作为返回值返回...writeToParcel() 方法中第二个参数,标识父对象会管理内部状态中重复数据 public static final int PARCELABLE_ELIDE_DUPLICATES...= 0x0001; //描述当前 Parcelable 实例对象类型 //比如说,如果对象中有文件描述符,这个方法就会返回上面的 CONTENTS_FILE_DESCRIPTOR

1.5K50
  • Android序列化总结

    ,那么该对象就需要实现序列化操作,在java中可以使用Serializable接口实现对象序列化,而在android中既可以使用Serializable接口实现对象序列化也可以使用Parcelable...概括性来说序列化是指将对象实例状态存储到存储媒体(磁盘或者其他介质)过程。在此过程中,先将对象公共字段和私有字段以及类名称(包括类所在程序集)转换为字节流,然后再把字节流写入数据流。...ok~,了解这么多,下面来看一个如何进行对象序列化和反序列化列子: public class Demo { public static void main(String[] args) throws...其实通过Intent传递复杂类型(如自定义引用类型数据)数据时就需要使用Parcelable对象,如下是日常应用中Intent关于Parcelable对象一些操作方法,引用类型必须实现Parcelable...,当然Bundle本身也是一个类似键值容器,也可存储Parcelable实现类,其API方法跟Intent基本相似,由于这些属于android基础知识点,这里我们就不过多介绍了。

    79920

    androidParcelable介绍

    image.png Parcelable Parcelable概述在SDK中是这样:这些类接口可以将实例写入或从中还原 Parcel。...简单ParcelableAndroid为我们提供序列化接口。 类似javaSerializable类。...序列化 由于存在于内存中对象都是暂时,无法长期驻存,为了把对象状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...概括性来说序列化是指将对象实例状态存储到存储媒体(磁盘或者其他介质)过程。在此过程中,先将对象公共字段和私有字段以及类名称(包括类所在程序集)转换为字节流,然后再把数据流字节流写入。...使用实例 进行Android开发时候,无法将对象引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。

    63520

    Serializable和Parcelable再次回忆

    Android中将对象序列化方式有两种Serializable和Parcelable这两个接口都可以完成。...(PS:关键字transient,这里简单说明一下,Javaserialization提供了一种持久化对象实例机制。...所以我们手动指定serialVersionUID值能很大程度上避免了反序列化失败。 以上就是自己Serializable认识,下边来看看Parcelable相关知识!!...反序列化功能是由CREATOR方法来完成,其内部标明了如何创建序列化对象和数组,并通过Parcel一系列read方法来完成反序列化过程(PS:write和read顺序必须一致~!)...而ParcelableAndroid序列化方法,因为更适合于在Android平台上,缺点就是使用起来比较麻烦,但是效率很高,这是Android推荐序列化方法,因为我们要首选Parcelable

    58020

    Android跨进程通信IPC之4——AndroidIPC基础1

    这里强烈建议把前面两篇文章看一遍,因为前面两篇文章后面大家androidIPC理解帮助很大,本片文章主要内容如下 1、Android IPC简介 2、Android 多进程模式 3、Serializable...如何进程对象序列化和反序列化也非常简单,只需要采用ObjectOutputStream和ObjectInputStream即可轻松实现。...2、反序列化是由CREATOR来完成,其内部标明了如何创建序列化对象和数组,并通过Parcel一些列read方法来完成反序列化过程。...通常我们存入Parcel对象内容,而Active Object 写入则是他们特殊标志引用。所以在从Parcel中读取这些对象时,大家看到并不是重新创建对象实例,而是原来那个被写入实例。...,java端引用是上面mNativePtr。

    1.3K30

    Android Activity间传值选择,Serializable Or Parcelable

    ,有二种办法,标记类实现Serializable接口 或者 添加代码实现Parcelable接口,注意是Serializable接口没有任何实际方法需要实现,只是一个标记,标记可以进行序列化。...Java中反序列化时通过SerialVersionUID来判断是否能够反序列化,所以需要序列化类最好都能给出一个固定SerialVersionUID值,如下 ?...而ParcelableAndroid提供接口,主要是通过writeToParcel(),将需要持久化字段保存到一个Parcel对象里面,然后通过CREATOR ?...从Parcel对象中,取出相应字段,完成对象恢复,很明显这里Parcelable优势,需要保存哪些字段我们可以自由控制,因为写接口暴露给我们了,需要恢复哪些字段,我们同样可以控制,所以相对于Serializable...框架提供给我使用,Google提供了比较好接口和文档支持,例如上面的putExtra,就有Parcelable数组重载方法。

    1.3K30

    Android序列化权威面试指南,资深面试者秘诀

    Android开发中,Serializable与Parcelable是两种用于实现对象序列化常见方式。在面试中,对于这两种技术理解和应用能力常常被用来评估一个Android开发者水平。...在Android中,Serializable可以直接用于序列化对象,但其性能相对较差,因为使用反射机制,会产生大量临时对象,导致内存占用较高,序列化和反序列化速度较慢。...对于一些简单对象,如配置信息等,可以考虑使用Serializable,但需要注意其性能影响。 问题: 如何实现一个复杂对象Parcelable序列化?...注意事项 问题: 在实现Parcelable时有哪些需要注意地方? 出发点: 面试官希望了解面试者实现Parcelable过程中可能遇到问题和注意事项掌握程度。...出发点: 面试官希望了解面试者它们之间性能差异影响知道方向有哪些 参考简答: Serializable和Parcelable在性能上差异主要体现在序列化和反序列化速度和内存消耗上。

    11810

    AndroidParcelable使用详解

    Parcelable与Serializable Serializable是Java为我们提供一个标准化序列化接口。 ParcelableAndroid为我们提供序列化接口。...序列化与反序列化 序列化:将对象转换为可以传输二进制流(二进制序列)过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地流(序列),从而进行传输数据 。...反序列化:从二进制流(序列)转化为对象过程。...简单使用: 进行Android开发时候,无法将对象引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。...中Parcelable使用详解,希望大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

    1.9K50

    金九银十,2019 Android精选面试实战总结整理(含详细解析)

    1)永久性保存对象,保存对象字节序列到本地文件中; 2)通过序列化对象在网络中传递对象; 3)通过序列化在进程间传递对象。...在Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable...两种实现方式依旧是贴url,方便大家快速查询 两种序列化相关 既然Google推荐Parcelable这种序列化,在这里,推荐一键生成序列化插件, 在Android Studio里面搜索插件,如下图,...GIF图,也可以根据指定图片清晰度,底层原理:为Bitmap维护一个对象池,对象目的是通过减少对象分配,以重用来提高性能.对象池也可以帮助提高滚动性能。...面试官(无论HR还是专业部门)主要是看你回答问题时思路是否清晰,回答中表现出工作态度如何,顺便看看你是否对公司和职位有足够了解。所以不管答案如何,最关键就是不能茫然。

    60920

    2019年面试实战总结,这些Android面试题你一定需要了解

    如何APK瘦身?...在Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable...两种实现方式依旧是贴url,方便大家快速查询 两种序列化相关 既然Google推荐Parcelable这种序列化,在这里,推荐一键生成序列化插件, 在Android Studio里面搜索插件,如下图,...GIF图,也可以根据指定图片清晰度,底层原理:为Bitmap维护一个对象池,对象目的是通过减少对象分配,以重用来提高性能.对象池也可以帮助提高滚动性能。...面试官(无论HR还是专业部门)主要是看你回答问题时思路是否清晰,回答中表现出工作态度如何,顺便看看你是否对公司和职位有足够了解。所以不管答案如何,最关键就是不能茫然。

    78931

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    ,对比是否和当前类seralVersionUID一致。...,不参与序列化过程 用transient关键字标记成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...反序列化:CREATOR完成,通过Parcel一系列read方法来完成,内部表明了如何创建序列化对象和数组。...Parcelable主要适用于内存序列化上,但通过Parcelable对象序列化到设备中或序列化后通过网络传输也可以,但稍微复杂,建议这种情况用Serializable。...---- 最后想说是,本系列文章为博主Android知识进行再次梳理,查缺补漏学习过程,一方面是自己遗忘东西加以复习重新掌握,另一方面相信在重新学习过程中定会有巨大新收获,如果你也有跟我同样想法

    40720

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    ,对比是否和当前类seralVersionUID一致。...,不参与序列化过程 用transient关键字标记成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...反序列化:CREATOR完成,通过Parcel一系列read方法来完成,内部表明了如何创建序列化对象和数组。...Parcelable主要适用于内存序列化上,但通过Parcelable对象序列化到设备中或序列化后通过网络传输也可以,但稍微复杂,建议这种情况用Serializable。...---- 最后想说是,本系列文章为博主Android知识进行再次梳理,查缺补漏学习过程,一方面是自己遗忘东西加以复习重新掌握,另一方面相信在重新学习过程中定会有巨大新收获,如果你也有跟我同样想法

    34430

    Android 应用开发】BluetoothClass详解

    Object类, 实现了Parcelable接口; Parcelable接口 :  Java中序列化方法 : 在Java中序列化有两种方法, 一种是实现Serializable接口, 一种是实现Parcelable...接口, Serializable接口是J2SE固有支持, ParcelableAndroid支持, 是Android中特有的, 效率比Serializable高; 序列化实现 :  Serializable...声明实现接口Parcelable; b. 实现writeToParcel接口, 将对象序列化成一个Parcel对象; c....实例化内部对象Parcelable.Creator, 注意对象名称必须是"CREATOR", 在这个内部对象中实现createFromParcel()方法, 可以将序列化对象Parcel对象序列化为源对象...公共方法 (1)描述序列化内容 public int describeContents () 作用 : 描述在Parcel序列化对象中特殊对象种类; 返回值 : Parcelable排列特殊对象类型集合位掩码

    24410

    Android常见问题及开发经验总结(四)

    单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问全局访问点 1)应用中某个实例对象需要频繁被访问。 2)应用中每次启动只会存在一个实例。如账号系统,数据库系统。...)里面又进行了是否为null判断,这是因为一个线程进入了该代码,如果另一个线程在等待,这时候前一个线程创建了一个实例出来完毕后,另一个线程获得锁进入该同步代码,实例已经存在,没必要再次创建,因此这个判断是否是...另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable...而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速进行数据序列化和反序列化,系统封装了Bundle类,方便我们进行数据传输。...如果是静态的话,你就不能直接引用外部类,迫使你关注如何避免相互引用。 所以将 ViewHolder内部类 定义为静态,是一种好习惯。 Android进程间通信有哪几种方式?

    42230
    领券