提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、Parcelable是什么?
Parcelable
是Android中的一个接口
,它允许对象可以被序列化,以便在不同的组件之间传递。
当一个类实现Parcelable接口后,它就可以被轻松地传递给其他组件。
二、使用步骤
- 简单说明:
要实现Parcelable接口,我们需要实现三个方法:describeContents()、writeToParcel()和createFromParcel()
。
describeContents()
方法用于返回当前对象的类型和数据类型,该方法除了当前对象存在文件描述符的时候,需要返回“1”,其他情况基本返回“0”
writeToParcel()
方法用于将对象的数据写入Parcel对象
createFromParcel()
方法用于从Parcel对象中创建原始对象。
- 补充:文件描述符
android系统是基于Linux操作系统的,故在Linux操作系统中,当一个应用程序
或进程
操作系统资源
时,首先会触发文件调用事件
,通过应用程序或进程
发送一个调用文件的信号
给操作系统内核
,内核
会在 打开文件表
中增加一条记录
,同时将 新增的记录
返回给应用程序或进程
,而应用程序或进程
接收到来自内核
返回的信息,称为 文件描述符(file desrciption)
。
1.简单说明
代码如下(示例):
//1.先写成员属性,再导入相关数据
public class User implements Parcelable {
public int userId;
public String userName;
public boolean isMale;
public User(int userId, String userName, boolean isMale) {
this.userId = userId;
this.userName = userName;
this.isMale = isMale;
}
/**
* 从序列化后的对象中创建原始对象
* @param in
*/
protected User(Parcel in) {
userId = in.readInt();
userName = in.readString();
isMale = in.readByte() != 0;
}
/**
* 反序列化——内部标明如果创建序列化对象和数组,read方法来完成反序列化过程
*/
public static final Creator<User> CREATOR = new Creator<User>() {
//从序列化后的对象创建原始对象
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
//创建指定长度的原始对象数组
@Override
public User[] newArray(int size) {
return new User[size];
}
};
/**
* 内容描述——除了当前对象存在文件描述符的时候,需要返回“1”。
* 其他任何情况都返回“0”
* @return
*/
@Override
public int describeContents() {
return 0;
}
/**
* 序列化功能
* @param dest 写对象的包裹
* @param flags 关于如何编写对象的其他标志。
* 为1的时候标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为0
* May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
*/
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(userId);
dest.writeString(userName);
dest.writeByte((byte) (isMale ? 1 : 0));
}
}