Intent传递对象信息方式Parcelable和Serializable(序列化)

里面讲的很详细
类通过实现Parcelable或Serializable接口,将对象信息序列化进而进行进程间对象信息的传递


一、为什么要序列化:
永久性保存对象,保存对象的字节序列到本地文件中
通过序列化的对象在网络中传递对象
通过序列化可以在进程间传递对象

这里引入一个概念,什么是序列化:
是自定义对象持久化
将对象从一个地方传递到另一个地方
使程序更具维护性
1、将对象状态信息转化为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时或持久性存储区,以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
2、序列化可以使其代码去查看或修改那些不序列化就无法访问的对象实例数据,而不依赖于对象的可访问性。反序列化是从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。
3、对于安全性的数据对象,应该尽可能使其不可序列化。如果必须序列化,可尝试生成特定字段来保存不可序列化的重要数据。如果不能实现这一点,就应该注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。

二、既然实现序列化可以继承Parcelable和Serializable中的一个接口,那么这两个接口又有什么区别呢?
Serializable是JavaSE本身就支持的
特点:实现起来简单,
          只需继承Serialzable就可以,
          无需重写方法
          Serializabe会将对象信息自动序列化
          序列化的时候会产生大量的临时变量,从而引起频繁的GC(垃圾回收机制)
          所以效率比Parcelable低
Parcelable是Android特有的
特点:实现起来Serialiable较复杂
          需要重写方法
          但是效率高

三、那么什么情况下才要使用Serializable呢?
由于Paeceable在外界有变化的情况下不能很好的保证数据的持久性,所以Parcelable不能使用在要将数据存储在磁盘上的情况
此时建议用Serializable

四、使用场景:
需要多个部件之间通过Intent传递数据,简单的类型(数字,字符串)的可以直接放入Intent中,复杂类型必须实现Parcelable接口。

Parcelable接口:


接下来写一个例子,介绍下他们各自的使用方法

分别写一个Person类实现Serializable接口
和写一个Book类实现Parcelable接口




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值