当前位置: 首页> 房产> 家装 > 在线妇科免费咨询_17网一起做网店普宁_济南百度公司_应用商店aso优化

在线妇科免费咨询_17网一起做网店普宁_济南百度公司_应用商店aso优化

时间:2025/7/15 1:20:07来源:https://blog.csdn.net/qq_30885821/article/details/143961804 浏览次数:0次
在线妇科免费咨询_17网一起做网店普宁_济南百度公司_应用商店aso优化

序列化:Parcelable 和 Serializable

为了把对象的状态保存下来,存到磁盘中,会用到序列化

  1. 序列化:内存中的对象—>磁盘
  2. 反序列化:磁盘中的对象—>内存

1 Serializable

用serialVersionUID辅助,一个类对应一个serialVersionUID。反序列化时,先判断是否是当前类的对象,再决定是否可以反序列化。

实现简单,内存开销大。

import java.io.Serializable;
public class SerializableImplement implements Serializable {/*** 生成序列号标识*/private static final long serialVersionUID = -2083503801443301445L;private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

2 Parcelable

为了解决Serializable内存开销大的问题,安卓提供了Parcelable。

Parcelable代码实现麻烦,但是内存开销小。

  1. 用writeToParcel方法,将对象映射成Parcel对象;
  2. 通过createFromParcel方法,将Parcel对象映射成我们的对象
import android.os.Parcel;
import android.os.Parcelable;public class ParcableImplement implements Parcelable {public int id;public String name;/*** 当前对象的内容描述,一般返回0即可** @return*/@Overridepublic int describeContents() {return 0;}protected ParcableImplement(Parcel in) {this.id = in.readInt();this.name = in.readString();}/*** 将当前对象写入序列化结构中** @param dest* @param flags*/@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(this.id);dest.writeString(this.name);}/*** public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。* 重写接口中的两个方法:* createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层,* newArray(int size) 创建一个类型为T,长度为size的数组,供外部类反序列化本类数组使用。*/public static final Creator<ParcableImplement> CREATOR = new Creator<ParcableImplement>() {/*** 从序列化后的对象中创建原始对象*/@Overridepublic ParcableImplement createFromParcel(Parcel in) {return new ParcableImplement(in);}/*** 创建指定长度的原始对象数组* @param size* @return*/@Overridepublic ParcableImplement[] newArray(int size) {return new ParcableImplement[size];}};
}

3 Parcelable 和 Serializable的区别

  1. 实现上的差异:
    Serializable只需通过Serializable接口,给对象添加一个UID,系统会自动将其序列化;
    Parcelable不只需要实现Parcelable接口,还需要在类中添加一个静态成员变量;要去实现读写的抽象方法,包括writeToParcel和createFromParcel等等。

  2. 效率上的对比:
    在内存间传递数据,推荐使用Parcelable。安卓端的数据传递,包括Activity,AIDL等的数据传递。
    序列化到存储设备,推荐使用Serializable。

关键字:在线妇科免费咨询_17网一起做网店普宁_济南百度公司_应用商店aso优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: