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

Android中的序列化:Parcelable和Serializable

Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过...在内存上的开销比较小,因此内存直接进行数据传递的时候,Android推荐使用Parcelable; 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过IO流的形式将数据写入到硬盘上...选择 Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如Activity间传输数据,而Serializable可将数据持久化方便保存...,所以在需要保存或网络传输数据时选择Serializable,因为Android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。.../reference/java/io/Serializable https://developer.android.com/reference/android/os/Parcelable https:/

77410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Parcelable与Serializable

    由于 Java 的 Serializable 的性能较低,Parcelable 正式在这个背景下产生的,它核心作用就是为了解决 Android 中大量跨进程通信的性能问题。...nativeCreate(); //jni注册 {"nativeCreate", "()J",(void*)android_os_Parcel_create}, //nativeCreate的具体实现...中, //后续我们通过Bundle的get操作直接从该Map中获取 } 写入 Parcel 数据时,都是通过键值对的形式,key 是固定的 String 类型,所以读取时也是先通过 readString...读取 key,紧接着 readValue 方法读取对应的 value: 前面分析**序列化过程写入 value 数据时,先写入该 value 数据对应的 int 类型,该类型在反序列化时会用到,此时系统就是根据该...//这样下次创建对应的Parcelable时,直接通过Creator实例createFromParcel创建, //避免了再次反射 map.put(name

    1.2K20

    Android 序列化 Serializable与Parcelable

    中提供了Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity...而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable...的出现为了满足数据在内存中低开销而且高效地传递问题。...所以Android应用程序在内存间数据传输时推荐使用Parcelable,如activity间传输数据和AIDL数据传递。...大多数情况下使用Serializable也是没什么问题的,但是针对Android应用程序在内存间数据传输还是建议大家使用Parcelable方式实现序列化,毕竟性能好很多,其实也没多麻烦。

    2.1K60

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

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。...该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!...另外,本系列文章知识可能需要有一定Android开发基础和项目经验的同学才能更好理解,也就是说该系列文章面向的是Android中高级开发工程师。...Android中的Parcelable 相对于Serializable而言,Parcelable的使用要复杂一些 public class Book implements Parcelable {...至此我们就得到了反序列化的对象 ---- 本篇总结 我们本篇详细分析了Android序列化相关知识,你可以使用Java中的Serializable也可以使用Parcelable。

    37920

    Android序列化总结

    接口则是android中特有的序列化接口,在某些情况下,Parcelable接口实现的序列化更为高效,关于它们的实现案例我们后续会分析,这里只要清楚知道实现序列化操作时必须实现Serializable接口或者...而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable...的出现为了满足数据在内存中低开销而且高效地传递问题。...所以Android应用程序在内存间数据传输时推荐使用Parcelable,如activity间传输数据和AIDL数据传递。...大多数情况下使用Serializable也是没什么问题的,但是针对Android应用程序在内存间数据传输还是建议大家使用Parcelable方式实现序列化,毕竟性能好很多,其实也没多麻烦。

    82020

    Android | 迁移到搭载M1芯片的Mac时的问题

    新近更换了搭载 M1 芯片的 Mac 电脑,在将旧电脑中正常运行的项目拷贝过来并运行时,出现了一系列的问题。本文对此进行相应的总结。 1.1....按照 《ndk-build 脚本中的 M1 支持 #1410》 描述,该问题是 ndk 与 M1 芯片不兼容导致的。...参考 《Unknown host CPU architecture: arm64 , Android NDK SiliconM1 Apple MacBook Pro》 中修改 ndk-build 一节可以解决该问题...解决 该问题也是因为项目中使用的 room 版本未与 M1 兼容,解决方案有 2,具体如下: 1.2.2.1....现象 在旧电脑中可以正常运行,但是迁移到新电脑之后,运行项目时一直提示找不到三方库的 .aar 文件,具体如下图: 该库的高版本可以正常获取,但是高版本中的 API 变更较大,切换后需要改的代码较多。

    4K40

    Android 尝试解决 Gradle 升级时 offline mode 类型问题

    和尚每次升级 AndroidStudio 和 Gradle 都倍感头疼,这次和尚从 2.3.3 升级到 3.1.4 版本,被 Gradle 的 offline modle 问题困扰了很久,现在整理一下和尚的处理方式...和尚发现同一个问题对于不同的环境,解决的方案也许不太一样,对于 offline modle 的问题,网上有很多的大神整理解决过,但对于和尚的环境未能解决,所以和尚的解决方案也许不能适合所有的朋友,大家仅当作一种思路参考尝试一下就好...和尚首先删除安装的 .android 和 .AndroidStudioX.X,如果有多个版本的 AndroidStudio 会有多个 .AndroidStudioX.X 文件夹,删除即可,注意:这几个文件夹很大...引入项目,查看 Android 下 gradle-wrapper.properties distributionUrl 已为最新版本 4.4; ? 5....修改 Project 下的 build.gradle 配置项,因为网络实在不佳,连接不上 Google,于是找了一下阿里云的镜像 http://maven.aliyun.com/mvn/view,按需要可以适当添加

    2.8K41

    Android Aidl跨进程通讯(三)--进阶使用

    学更好的别人, 做更好的自己。 ——《微卡智享》 Android的AIDL使用和异常报错都已经介绍过了,今天这篇还是在原来的Demo基础上加入几个AIDL的进阶使用方法。...Bundle类是一个键值对的容器,它可以存储不同类型的数据,并且实现了Parcelable接口,所以可以在进程间传输。...但在应用刚启动时,默认class loader是apk classloader,在系统内存不足应用被系统回收会再次启动,这个默认class loader会变为framework classloader了...,所以对于自己的类会报ClassNotFoundException,就会出现android.os.BadParcelableException: ClassNotFoundException when...会变为framework classloader了,所以对于自己的类会报ClassNotFoundException 就会出现android.os.BadParcelableException

    73820

    Java IO之对象的序列化、ObjectInputStream和ObjectOutputStream类

    ,要考虑JDK版本的问题,如果序列化的JDK版本和反序列化的JDK版本不统一则就可能造成异常,所以在序列化操作中引入了一个serialVersionUID的常量,可以通过此常量来验证版本的一致性,在进行反序列化时... 拓展:          保存的数据有限,所以为了解决这样的问题,Java 中引入了类集 框架解决数组的存储限制问题。...,都是与系统相关的,在编程时应尽量使用。     ...附录2:    Android中实现序列化有两种选择:一是实现Serializable接口,二是实现Parcelable接口(android特有的功能,效率比实现Serializable接口高效,可用于...2.应用场景:    需要在多个部件(Activity或Service)之间通过Intent传递一些数据时,简单类型的可以直接放入Intent,复杂类型的必须实现Parcelable接口。

    1.1K30

    Android 反序列化漏洞攻防史话

    = false; public static final android.os.Parcelable.Creator CREATOR = new android.os.Parcelable.Creator...仅仅进行反序列化并不会出现任何问题,只不过在使用具体的元素时,如果我们实际读取的类型无法转换为整数,就会出现 ClassCastException 异常。...其他 上面只介绍了漏洞利用的大致流程,完整的利用还有一些细节需要注意,比如: 如何将任意 Parcelable 放到 Intent 中; 精细的内存布局; 对于问题 1,使用 putExtras(Bundle...作者是用了一个在 Android 12 中加入的 Intent.ClipData 字段去实现的,不过目前已经修复了就不再展开了。 对于问题 2,有几个关键点需要注意。...RemoteViews; 对于问题 2,我们可以尝试使其中某个 LazyValue 解析失败,比如 Parcelable 的类不存在时,代码会抛出 ClassNotFoundException,被捕捉后再次抛出

    1.9K60

    swoole安装时的问题

    背景 第一次研究swoole: 看官网的手册学习,并写了一个“会员通知实时短信发送”【超级简单的应用,只用了swoole1%的东西】 第二次研究: 1、原因:学习PHP的多进程-PCNTL,学完发现...:swoole可以更全面、更高性能的使用多进程。...2、总结: A、PCNTL和swoole的原理类似,但不同。 B、PCNTL用PHP+c实现,应用级、生产级别没有现成的封装,要自己慢慢敲。...优点:对多线程原理的理解深刻 C、swoole用纯c实现,控制的是Linux的kernel内核。最大发挥了Unix系统的高性能。...+ declare(ticks = 1)对比pcntl_signal_dispatch,后者像是事件模式,前者类似while循环】 安装问题: 4.3源码里的examples里的server.php

    1.1K20

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

    理解与运用 问题: 解释Serializable和Parcelable的区别,以及它们在Android中的应用场景。...出发点: 在回答这个问题时,需要深入理解Serializable和Parcelable的实现原理及其在Android中的性能影响,以及在不同场景下的选择。...在Android中,推荐使用Parcelable来传递复杂对象,特别是在需要频繁传递对象时,Parcelable的性能更佳。...出发点: 考察面试者对于性能优化的重视程度,以及对于Android开发最佳实践的理解。 参考简答: Android官方推荐使用Parcelable而不是Serializable的主要原因是性能问题。...跨进程传输问题: 如果使用Parcelable在跨进程传输数据时,需要确保所有相关的类都是可序列化的,并且数据量不要过大,以免导致TransactionTooLargeException异常。

    14910

    Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

    新Activity启动及旧Activity保存流程 App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity...,在异常杀死的情况下onCreate(Bundle savedInstanceState)函数的savedInstanceState参数也不是null,而是包含了被杀死时所保存的场景信息。....app.AppCompatActivity.onCreate(AppCompatActivity.java:81) 上面的这两个问题主要涉及后台杀死后FragmentActivity自身的恢复机制,其实...Activity都是可能被后台杀死的,比如,在开发者选项中打开不保留活动,就会达到这种效果,在启动另一个Activity时,上一个Activity的保存流程大概如下,这里先简单描述,在下一篇原理篇的时候...后台杀死时View的保存及恢复 FragmentTabHost应对后台杀死做的兼容 FragmentTabHost其实跟ViewPager很相似,在onSaveInstanceState执行的时候保存当前位置

    3.1K30
    领券