Android里为了提高序列化效率,提高了一个类似于java原生的Serializable的序列化接口——Parcelable。
下面就来详细说说这个Parcelable接口:
1.为什么要进行序列化?
1)永久性的保存对象,将对象序列化到文件中;
2)通过序列化对象在网络中传递数据;
3)通过序列化在进程中传递数据;
2.Android中实现序列化的方法
Android中实现序列化有两个选择:一是实现Serializable接口(是Java本身就支持的),一是实现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接口。
5.使用详解:
1)定义序列化实体类:
import android.os.Parcel;
import android.os.Parcelable;
/**
* 实现Parcelable接口
*/
public class Entity implements Parcelable {
private int id;
private String name;
public Entity(int id, String name) {
this.id = id;
this.name = name;
}
public Entity(Parcel in) {
this.id = in.readInt();
this.name = in.readString();
}
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;
}
//默认返回"0"就行
@Override
public int describeContents() {
return 0;
}
//将对象数据写入到Parcel对象中,如intent.putExtra("Parcel", entity)将调用
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
}
//定义Parcelable.Creator内部类,注意:类名只能为CREATOR,全大写,不能为小写 //或者其他名
//public static final 这些修饰符一个都不能少
public static final Parcelable.Creator<Entity> CREATOR= new Parcelable.Creator<Entity>() {
//反序列将调用该方法还原,如Entity entity = (Entity)intent.getPa //rcelableExtra("Parcel")将调用该方法
@Override
public Entity createFromParcel(Parcel source) {
return new Entity(source);
}
//默认返回new Entity[size]就行
@Override
public Entity[] newArray(int size) {
return new Entity[size];
}
};
}
2) 传递数据
3)获取数据
6.使用Parcelable进行对象传递的原理解析
1)当我们调用intent.putExtra("Parcel", entity);时会entity对象写入到一个Parcel对象中 ,调转到 ParcelResultActivity后再从Parcel对象中将entity对象还原Entity entity = (Entity)intent. getParcelableExtra ("Parcel");
2)上面提到两个关键字:写入和还原;上面的 Entity entity = (Entity)intent.getParcelableExtra ("Parcel")就是写入操作,而静态内部类CREATOR中的public Entity createFromParcel(Parcel source) {就是还原操作;
3) 当有Parcelable对象也可以通过IPC传递
- 大小: 175.7 KB
- 大小: 232.6 KB
分享到:
相关推荐
这个"android aidl Parcelable使用DEMO"是演示如何通过AIDL来处理Parcelable接口的对象,使得这些对象能够在不同的Android进程间传递。下面将详细介绍AIDL和Parcelable的相关知识点。 首先,理解AIDL的用途。当一个...
本示例"ParcelableDemo"将详细介绍如何在Android应用中使用Parcelable接口。 首先,理解Parcelable接口的目的是为了在内存中高效地创建和复制对象的二进制表示形式,这对于Intent传递数据、保存Activity状态或在...
3、Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable。存储到设备或者网络传输上选择...
在Android开发中,Parcelable接口是Android系统提供的一种高效的数据序列化方式,相比于Serializable接口,它在传递和存储...这个简单的`Student`类示例展示了如何实现和使用Parcelable,帮助开发者理解这一关键概念。
在Android Studio中,你可以很快速的使用Parcelable插件进行实体类的序列化的实现,使用该插件后,你的实体类可以快速的实现Parcelable接口而不用写额外的代码。因为该插件会帮你快速的生成必须提供的方法,可以说是...
1. **性能**:`Parcelable`在序列化和反序列化速度上远超`Serializable`,在内存占用和CPU使用率方面也更优。 2. **代码量**:实现`Parcelable`接口需要编写较多的代码,而`Serializable`只需添加`implements ...
本篇文章将详细探讨`Parcelable`在Android中的使用方法,实例解析其序列化过程,并通过`parcelableDemo`项目进行实战演练。 首先,了解`Parcelable`的基本概念。`Parcelable`是Android中用于对象序列化的接口,它...
ParcelableGenerator 介绍 ParcelableGenerator可以将任意对象转换为Parcelable类型,方便对象传输。 在Android中,对象的序列化一般有两种方式,一种是...ParcelableGenerator可以解决Parcelable使用麻烦的问题
在Android studio 4.0+以后在插件中已经搜索不到Android Parcelable code generator这个超级好用的插件了,唯一能使用的方式就是下载离线插件包,进行离线安装。 File -> Settings -> Pugins -> Install plugin from...
注意,不是所有对象都能直接使用Parcelable,只有自定义的类或Android提供的类(如Bundle)支持。如果需要传递非Parcelable对象,可以考虑先将其转换为Parcelable类型,例如通过Gson库将其转化为JSON字符串,然后在...
1. AIDL只能传递基本数据类型、Parcelable对象和实现了Parcelable接口的数组。 2. 当传递复杂的对象结构时,需要确保所有对象都实现了Parcelable。 3. 跨进程通信可能会有性能开销,因此应谨慎使用。 4. 服务端需要...
理解并熟练使用Parcelable对于优化应用性能至关重要。 Parcelable接口是Android系统提供的,用于在内存中高效地复制对象。这在Activity之间的intent传递、保存Fragment状态或使用Binder进行跨进程通信时特别有用。...
"parcelable android demo"是一个实战项目,旨在帮助开发者理解并掌握Parcelable的使用方法。 首先,我们来详细了解一下Parcelable接口。在Android中,当需要在Activity之间传递复杂对象或者保存到Bundle时,就需要...
3. 生成代码:选中已添加注解的类,使用快捷键或通过菜单栏的“Generate”选项,选择“Parcelable”来自动生成相关代码。 4. 检查和调试:生成的代码会自动填充到类中,检查代码确保无误后,就可以在项目中使用了。 ...
- 当你需要在Intent中传递大量数据时,推荐使用Parcelable,因为Intent的传输性能直接影响到应用的响应速度。 - 对于简单的数据存储和恢复,如保存Activity状态,Serializable就足够了,因为实现简单且能满足需求。 ...
android parcelable code generator
例如,使用`@BindView(R.id.button)`注解可以将按钮对象直接绑定到字段上,用`@OnClick(R.id.button)`注解来添加点击事件。这样,代码更加清晰,可读性更强,同时也减少了出错的可能性。安装ButterKnife插件后,...
Parcelable是Android平台提供的一种高效的数据序列化方式,比传统的Serializable接口性能更好,但使用起来也相对复杂。本文将深入探讨Android中的Parcelable接口及其序列化流程。 首先,`Parcelable`接口是Android...
android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144
同时,为了提高可读性和维护性,也可以考虑使用代码生成工具,如Android Studio的` Parcelable code generator plugin`,它可以自动生成大部分的序列化和反序列化代码。 总结来说,通过实现Parcelable接口,开发者...