IPC基础概念---Parcelable接口

参考:《Android开发艺术探索》

parcelable 和 Serializable都能实现序列化并且可以用于Intent间数据传递,那么二者该如何选取?

Serializable是Java中序列化接口,其使用起来简单开销大。序列化和反序列化需要大量的I/O操作
parcelable 是android序列化方式,它的缺点就是使用起来稍微麻烦,但是效率高,这是android推荐的序列化方式。因此首选parcelable 。但parcelable 主要用于内存序列化,想将对象序列化到存储设备中或者将对象序列化后通过网络传输,使用parcelable 过程会稍显复杂,这2种情况下建议使用Serializable。
使用parcelable 代码如下:
      
      
public class Account implements Parcelable {
private String account;//账号
private String name;//用户名
private String icon;//用户头像
private int sex;//性别 0:未设置 1:女 2:男 3:其他
private String sign;//个性签名
private String area;//用户所在区域
private String token;//用户与服务器交互的唯一标
private boolean current;//是否是当前用户
 
//...get和set方法,省略
 
 
@Override
public int describeContents() {
return 0;
}
 
//序列化,Parcel内部包装了可序列化的数据,可以在Binder中自由传输
@Override
public void writeToParcel(Parcel parcel, int i) {
Bundle val = new Bundle();
 
val.putString("account", account);
val.putString("name", name);
val.putString("icon", icon);
val.putString("sign", sign);
val.putString("area", area);
val.putString("token", token);
 
val.putInt("sex", sex);
val.putBoolean("current", current);
 
parcel.writeBundle(val);
}
 
//反序列化,内部标明了结创建序列化对象和数组
public static final Parcelable.Creator<Account> CREATOR = new Creator<Account>() {
@Override
public Account createFromParcel(Parcel parcel) {
return new Account(parcel);
}
 
@Override
public Account[] newArray(int i) {
return new Account[i];
}
};
private Account(Parcel parcel) {
Bundle val = parcel.readBundle();
account = val.getString("account");
name = val.getString("name");
icon = val.getString("icon");
sign = val.getString("sign");
area = val.getString("area");
token = val.getString(" token");
 
sex = val.getInt("sex");
current = val.getBoolean("current");
}
}
从代码可以知道,主要实现的功能有序列化、反序列化和内容描述.
序列化功能:writeToParcel方法完成,最终通过Parcel中的一系列write方法来完成。
反序列化:CREATOR来完成,内部标明如何创建序列化对象和数组,并通过Parcelde的一系列read方法来完成反序列化.
内容描述:describeContents方法来完成,几乎所有情况下这个方法都返回0,仅当当前对象中存在文件描述符时,返回1.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值