Android Intent传递对象为啥要序列化,序列化有那几种方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Intent传递对象为啥要序列化,序列化有那几种方式相关的知识,希望对你有一定的参考价值。

参考技术A         我们都知道进行android 开发的时候,跳转到Activity和Fragment的时候,传递对象是通过Intent或者bundle 进行传递。当这个对象没有实现序列化的时候 当你通过Inetnt传递的时候会报红,系统会提示你将这个对象实现序列化。

      1.先了解一下 什么是序列化。通过对《Android 开发艺术探索》可以知道序列化是将一个对象转化成可存储可传输的状态,序列化后的对象可以在网络上传输,也可以存储到本地。

       2.回到我们的主题,那为什么要序列化呢?<大致有三个原因>

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

               b.对象可以在网络中传输

               c.对象可以在IPC之间传递

    3.序列化有那几种方式呢<有两种方式> 

      android自定义对象可序列化有两个选择一个是Serializable和Parcelable

     4.它们之间有什么区别?

             a.在使用内存的时候Parcelable比Serializable的性能高。

             b.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC(内存回收)。

             c.Parcelable不能使用在将对象存储在磁盘上这种情况,因为在外界的变化下Parcelable不能很好的保证数据的持续性。

            d.实现Serializable很简单 因为Serializable是一个空接口 所以只要在在实体类中实现这个接口即可 Parcelable就稍微复杂了一点了 

            这里有实现Parcelable 这个接口的列子  blog.csdn.net/jaycee110905/article/details/21517853  

Android——通过Intent传递一些二进制数据的方法有哪些

1、方法

(1)使用Serializable接口实现序列化。利用Bundle.putSerializable(Key, Object);这里objec对象需要实现serializable接口。

(2)实现Parcelable接口串行化。利用Bundle.putParcelable(Key, Object);这里Object对象需要实现Parcelable接口。

 

2、两者区别:

(1)在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类。

(2)Serializable在序列化的时候会产生大量的临时变量。

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

3、实现:

(1)Serializable的实现,只需要继承implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。

(2)Parcelable的实现,需要在类中添加一个静态成员变量CREATOR(必须是public,否则报错),这个变量需要继承Parcelable.Creator接口。

 

 

转自:http://blog.csdn.net/wulongtiantang/article/details/7937094

 

以上是关于Android Intent传递对象为啥要序列化,序列化有那几种方式的主要内容,如果未能解决你的问题,请参考以下文章

intent传对象为啥要序列化

对象的传递为啥要 序列化 呢

Android Intent传递对象为什么要序列化?

android bean 中含有bitmap 怎么用过intent传递

android intent 可以传递enum 吗

Android :安卓学习笔记之 通过Intent传递类对象(实现Serializable和Parcelable接口)