Binder相关面试总结(五):为什么Activity间传递对象需要序列化

本文介绍了序列化的基本概念、作用,以及在Android中使用Serializable和Parcelable两种序列化机制的区别。重点讨论了Activity间传递对象需要序列化的原因,涉及到对象状态的保存、网络和进程间通信。同时,文中详细阐述了Serializable接口的使用,包括serialVersionUID的重要性,并给出了序列化和反序列化的示例代码。
摘要由CSDN通过智能技术生成

1. 什么是序列化


序列化 Serialization – 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

简单来说:

  • 序列化:把对象转换为字节序列的过程称为对象的序列化。

  • 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

2. 为什么要序列化


序列化的原因基本三种情况:

  • 永久性保存对象,保存对象的字节序列到本地文件中;

  • 对象在网络中传递;

  • 对象在 IPC 间传递。

3. Android中的两种序列化机制


  • 实现 Serializable 接口

  • 实现 parcelable 接口

3.1 两种序列化方式的区别:

  • Serializeblejava 的序列化方式,ParcelableAndroid 特有的序列化方式;

  • 在使用内存的时候,ParcelableSerializable 性能高,所以推荐使用 Parcelable

  • Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC

  • Parcelable 不能使用在要将数据存储在磁盘上的情况,因为 Parcelable 不能很好的保证数据的持续性在外界有变化的情况下。尽管 Serializable 效率低点, 也不提倡用,但在这种情况下,还是建议你用 Serializable

  • Serializeble 序列化的方式比较简单,直接集成一个接口就好了,而 parcelable 方式比较复杂,不仅需要集成 Parcelable 接口还需要重写里面的方法。

3.2 两种序列化的使用

Serializable 接口

Serializable 是 Java 提供的序列化接口,它是一个空接口:

public interface Serializable {

}

Serializable 用来标识当前类可以被 ObjectOutputStream 序列化,以及被 ObjectInputStream 反序列化。

Serializable 有以下几个特点:

  • 可序列化类中,未实现 Serializable 的属性状态无法被序列化/反序列化

  • 也就是说,反序列化一个类的过程中,它的非可序列化的属性将会调用无参构造函数重新创建

  • 因此这个属性的无参构造函数必须可以访问,否者运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值