Android Parcelable接口使用心得
来源:互联网 发布:淘宝中石油7.3折加油卡 编辑:程序博客网 时间:2024/06/05 09:54
Android开发中使数据序列化有两种方法:实现Serializable接口或者实现Parcelable接口,Serializable接口是JAVA提供的一个序列化方法,相对于Parcelable接口的优点是使用起来非常简单,不用做额外的操作,JAVA内部已经帮我们做了相应的操作,缺点是使用起来的效率没有Parcelable高。Parcelable接口是Android特有的接口,使用起来比Serializable接口相对复杂,需要自己实现相应的方法,也正因为这样所以他的效率比Serializable接口要高,开发中还是建议使用Parcelable接口。
实现了Parcelable接口后会让我们重写两个方法:
@Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { }
describeContents()这个方法用于创建位掩码通常直接返回0;
writeToParcel(Parcel dest, int flags) 这个方法用于将数据写入成一个Parcel对象。例如:
@Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeInt(name); dest.writeString(sex); }
重写了这两个方法后还需要实现Parcelable.Creator接口:
public static final Parcelable.Creator<T> CREATOR2 = new Creator<T>() { @Override public T createFromParcel(Parcel source) { // TODO Auto-generated method stub return null; } @Override public T[] newArray(int size) { // TODO Auto-generated method stub return null; } };
createFromParcel()从Parcel中创建类的实例,newArray()方法返回一个长度为size的数组。
最后还要实现一个构造方法用于读取数据。
public XXX(Parcel source) { id = source.readInt(); name= source.readString(); }
完整代码:
import android.os.Parcel;import android.os.Parcelable;public class Person implements Parcelable { private int id; private String name; private String sex; public Person() { } //从parcel中读取数据 public Person(Parcel source) { id = source.readInt(); name = source.readString(); sex = source.readString(); } //将数据写入实例化parcel对象 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeString(name); dest.writeString(sex); } 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; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public int describeContents() { return 0; } public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel source) { // TODO Auto-generated method stub return new Person(source); } @Override public Person[] newArray(int size) { // TODO Auto-generated method stub return new Person[size]; } };}
最后有一点特别值得注意,写入数据的顺序必须和读取数据的顺序一致!
0 0
- Android Parcelable接口使用心得
- 【Android】Parcelable接口的使用
- Android Parcelable接口使用介绍
- Android Parcelable接口的使用
- Android中使用Parcelable接口
- Android-Parcelable接口的使用
- Android中的parcelable接口使用
- Android Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- android.os.Parcelable 接口的使用
- QNX常用命令
- iOS 图片加载 圆形进度条
- LintCode-最接近零的子数组和
- Android支持多国语言化Values命名
- 题目1503:二叉搜索树与双向链表
- Android Parcelable接口使用心得
- 超过130个你需要了解的vim命令
- Android 内存溢出解决方案(OOM) 整理总结 (软引用(SoftReference)、虚引用(PhantomRefrence)、弱引用(WeakReference),)
- SAP校验和替代
- Oracle 流程控制
- Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
- Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决
- 算法导论6.5-9,K个有序链表合并 nlgn
- SpringMVC-03 使用POJO作为参数