Android Parcelable
一:是什么?
Paracelable是android自己的实现序列化的接口,是anroid推荐使用的.那么什么事序列化呢?简单来说就是将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 ,那反序列化就是从二进制流(序列)转化为对象的过程
简单来说,Parcel提供了一套机制,可以将序列化之后的数据写入到一个共享内存中,其他进程通过Parcel可以从这块共享内存中读出字节流,并反序列化成对象.而Parcel本身就是包裹的意思.
二:为什么?
再次之前我都是使用Serializable,虽然知道了Paracelable,但还是使用Serializable,理由就是简单,只需要类extends 该接口即可。但当我知道Paracelable的效率最高可以达到Serializable的10倍我就果断放弃传统方式了。并在此记录。
三:怎么做?
第一步:首先写一个User类实现Parcelable接口。我们这里先列举User类常用类型int ,String ,boolean;
这里要重写两个方法,writeToParcel是序列化方法,如图:
接着会继续让你实现方法。我们按提示来.
效果:
根据上面过程的介绍,Parcelable就写完了,基本都是自动生成的,接下来就可以直接在Intent中传输了,可以自己写两个Activity传输一下数据试一下,其中一个putExtra另一getParcelableExtra即可。
下面来说一下对象和集合的序列化。我们在之前的user类中,再添加个对象和集合,如图:
如果实现Parcelable接口的对象中包含对象或者集合,那么其中的对象也要实现Parcelable接口 .,也就是我们的Author要实现Parcelable接口:
跟User是一样的,没啥说的。
先看添加了集合和对象已经对象集合跟之前User的构造方法中的变化:
反序列化方法中还是跟之前一样:
序列化的方法:都有注释不解释。
补充:
//这里获取类加载器主要有几种方式
getClass().getClassLoader();
Thread.currentThread().getContextClassLoader();
Author.class.getClassLoader()
完毕!