Android Parcelable问题
来源:互联网 发布:java springmvc框架 编辑:程序博客网 时间:2024/05/16 10:06
1.实现Parcelable就是为了进行序列化,那么,为什么要序列化?
1)永久性保存对象,保存对象的字节序列到本地文件中;2)通过序列化对象在网络中传递对象;3)通过序列化在进程间传递对象。
2.实现序列化的方法
Android中实现序列化有两个选择:一是实现Serializable接口,一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
注:Android中Intent传递对象有两种方法:一是Bundle.putSerializable(Key,Object)
,另一种是Bundle.putParcelable(Key,Object)
。当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口。
3.选择序列化方法的原则
1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。
4.应用场景
需要在多个部件(Activity或Service)之间通过Intent传递一些数据,简单类型(如:数字、字符串)的可以直接放入Intent。复杂类型必须实现Parcelable接口。
public interface Parcelable
{
//内容描述接口,基本不用管
public int describeContents();
//写入接口函数,打包
public void writeToParcel(Parcel dest, int flags); //写入Parcel容器
//读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入
//为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例
public interface Creator
{
public T createFromParcel(Parcel source); //通过Parcel构造一个对象返回
public T[] newArray(int size); //返回一个对象数组
}
}
实现Parcelable步骤
1)implements Parcelable
2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从 Parcel容器获取数据
3)重写describeContents方法,内容接口描述,默认返回0就可以
4)实例化静态内部对象CREATOR实现接口Parcelable.Creator
public static final Parcelable.Creator CREATOR
注:其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需重写本接口中的两个方法:createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层,newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话即可(return new T[size]),供外部类反序列化本类数组使用。
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
- Android Parcelable问题
- Android序列化问题-Parcelable和Serializable
- Android Parcelable数据异常(问题)
- Android Parcelable
- Android Parcelable
- Android Parcelable
- Android Parcelable
- Android Parcelable
- android parcelable
- android Parcelable
- android Parcelable
- Android Parcelable
- Android Parcelable
- Android Parcelable
- Android :Parcelable
- android Parcelable
- Android Parcelable
- Android Parcelable
- python处理某些文件夹下的csv文件,提取指定行到新文件中
- VUE+WebPack精美游戏设计:实现像微信红包打开时钱币转动的动画精灵和页面数据的本地存储
- HDU 1789(贪心)
- 上传图片文件用PHP处理
- 基于stm32串口环形缓冲队列处理机制—入门级(单字节)
- Android Parcelable问题
- zlib数据格式及解压缩实现
- struts2+hibernate+ehcache二级缓存(注解方式)
- getFilesDir()与getExternalFilesDir()的区别
- 用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)
- 分布式消息队列
- python自动测试
- 【Scikit-Learn 中文文档】模型选择:选择估计量及其参数
- 深入理解Java垃圾回收机制