序列化机制
1.什么叫序列化,什么叫反序列化
序列化: 将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
2.Parcel.Parcelable,Bundle,Serializable
Parcel
可以通过IBinder发送的消息(数据和对象引用)的容器.
被设计为高性能IPC传输
不适合持久性存储
Pacel包裹不是通用的序列化机制。 此类(以及用于将任意对象放入Parcel的相应的Parcelable API)被设计为高性能IPC传输。 因此,将任何Parcel数据放置到持久性存储中是不合适的:对Parcel中任何数据的基础实现的更改可能会使较旧的数据变得不可读。
Parcelable
实现了该接口的实例可以从Parcel中写入和恢复
3.在Activity之间发送数据
对象推荐使用实现Parcelable,通过Intent和Bundle传递.
4.在进程之间发送数据
不建议使用自定义的Parceable.
Binder 事务缓冲区的大小固定有限,目前为 1MB,由进程中正在处理的所有事务共享。由于此限制是进程级别而不是 Activity 级别的限制,因此这些事务包括应用中的所有 binder 事务,例如 onSaveInstanceState,startActivity 以及与系统的任何互动。超过大小限制时,将引发 TransactionTooLargeException。
对于 savedInstanceState 的具体情况,应将数据量保持在较小的规模,因为只要用户可以返回到该 Activity,系统进程就需要保留所提供的数据(即使 Activity 的进程已终止)。我们建议您将保存的状态保持在 50k 数据以下。
5.Parcelable和Serializable的区别
虽然两者都是用于支持序列化、反序列化话操作,但是两者最大的区别在于存储媒介的不同
Serializable是将序列化后的对象存储在硬盘上,使用I/O读写的方式,而Parcelable是将其存储在内存中,是针对内存的读写,熟悉计算机组成原理的朋友都知道,内存的读写速度显然要远远大于I/O的读写速度,这也是为什么Android中推荐使用Parcelable这种方式来实现对象的序列化。**
Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!