Android中的Parcel机制和Serialize机制
来源:互联网 发布:mac 安装twisted 编辑:程序博客网 时间:2024/04/29 19:06
实现了Bundle传递对象, 使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parcel机制,即,Android实现的轻量级的高效的对象序列化和反序列化机制。
JAVA中的Serialize机制,译成串行化、序列化……,其作用是能将数据对象存入字节流当中,在需要时重新生成对象。主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等。
Android中的新的序列化机制,在Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中采用了新的IPC(进程间通信)机制,必然要求使用性能更出色的对象传输方式。在这样的环境下,Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序列化机制。
Android中序列化有以下几个特征:
1. 整个读写全是在内存中进行,所以效率比JAVA序列化中使用外部存储器会高很多;
2. 读写时是4字节对齐的
3. 如果预分配的空间不够时,会一次多分配50%;
4. 对于普通数据,使用的是mData内存地址,对于IBinder类型的数据以及FileDescriptor使用的是mObjects内存地址。后者是通过flatten_binder()和unflatten_binder()实现的,目的是反序列化时读出的对象就是原对象而不用重新new一个新对象。
代码:
activity代码:
Intent mIntent =newIntent(this,ParcelableDemo.class);
Bundle mBundle =newBundle();
mBundle.putParcelable(PAR_KEY, mPolice);
mIntent.putExtras(mBundle);
实体类:
public class Police implements Parcelable {
private String name;
private int workTime;
public String getName() {
returnname;
}
public void setName(String name) {
this.name = name;
}
public int getWorkTime() {
returnworkTime;
}
public void setWorkTime(int workTime) {
this.workTime = workTime;
}
public static final Parcelable.Creator<Police> CREATOR =newCreator<Police>() {
@Override
public Police createFromParcel(Parcel source) {
Police police =newPolice();
police.name = source.readString();
police.workTime = source.readInt();
returnpolice;
}
@Override
public Police[] newArray(int size) {
returnnewPolice[size];
}
};
@Override
public int describeContents() {
return0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(name);
parcel.writeInt(workTime);
}
}
JAVA中的Serialize机制,译成串行化、序列化……,其作用是能将数据对象存入字节流当中,在需要时重新生成对象。主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等。
Android中的新的序列化机制,在Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中采用了新的IPC(进程间通信)机制,必然要求使用性能更出色的对象传输方式。在这样的环境下,Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序列化机制。
Android中序列化有以下几个特征:
1. 整个读写全是在内存中进行,所以效率比JAVA序列化中使用外部存储器会高很多;
2. 读写时是4字节对齐的
3. 如果预分配的空间不够时,会一次多分配50%;
4. 对于普通数据,使用的是mData内存地址,对于IBinder类型的数据以及FileDescriptor使用的是mObjects内存地址。后者是通过flatten_binder()和unflatten_binder()实现的,目的是反序列化时读出的对象就是原对象而不用重新new一个新对象。
代码:
activity代码:
Intent mIntent =newIntent(this,ParcelableDemo.class);
Bundle mBundle =newBundle();
mBundle.putParcelable(PAR_KEY, mPolice);
mIntent.putExtras(mBundle);
实体类:
public class Police implements Parcelable {
private String name;
private int workTime;
public String getName() {
returnname;
}
public void setName(String name) {
this.name = name;
}
public int getWorkTime() {
returnworkTime;
}
public void setWorkTime(int workTime) {
this.workTime = workTime;
}
public static final Parcelable.Creator<Police> CREATOR =newCreator<Police>() {
@Override
public Police createFromParcel(Parcel source) {
Police police =newPolice();
police.name = source.readString();
police.workTime = source.readInt();
returnpolice;
}
@Override
public Police[] newArray(int size) {
returnnewPolice[size];
}
};
@Override
public int describeContents() {
return0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(name);
parcel.writeInt(workTime);
}
}
0 0
- Android中的Parcel机制和Serialize机制
- Android中的Parcel机制
- 探索Android中的Parcel机制
- 探索Android中的Parcel机制
- 关于Android中的Parcel机制
- 探索Android中的Parcel机制
- 探索Android中的Parcel机制
- Android中的Parcel机制(上)
- Android中的Parcel机制(下)
- 探索Android中的Parcel机制
- 探索Android中的Parcel机制(上)
- 探索Android中的Parcel机制(下)
- 探索Android中的Parcel机制(上)
- 探索Android中的Parcel机制(下)
- 探索Android中的Parcel机制(上) .
- 探索Android中的Parcel机制(下)
- 探索Android中的Parcel机制(上)
- 探索Android中的Parcel机制(上)
- 理解红黑树(1)
- android面试题
- 忙里偷闲,学习了一下下
- Android中关于Volley的使用(四)认识 NetworkDispatcher 和 BasicNetwork
- UIViewController中各方法调用顺序及功能详解
- Android中的Parcel机制和Serialize机制
- 日益4月招投奖励活动颁布
- hdu~1003(简单dp)
- Java 分布式处理技术
- 指定的架构名称 "dbo" 不存在,或者您没有使用该名称的权限.
- JAVA线程同步浅析
- 理解红黑树(2)
- SQL分页语句
- android 百度地图API使用教程说明