序列化的目的:

1、永久性保存对象,保存对象的字节序列到本地文件中
2、让对象在网络中传递
3、让对象在IPC间传递

序列化的方法:

有两种实现序列化的方法,分别实现Serializable接口和Parcelable接口。前者是Java中的序列化接口,后者是Android自带的序列化接口。Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,所以在使用内存时更推荐使用Parcelable。但Parcelable有一个明显的缺点是不能使用在将数据存储在磁盘上的情况。因为Parcelable本质上是为了更好的实现对象在IPC间传递,并不是一个通用的序列化机制。

代码实现:

Serializable接口的实现及运用:
Serializable的接口实现较简单,让类继承该接口即可,系统会自动将其序列化,具体代码如下

public class Book implements Serializable {    private static final long serialVersionUID = 21455356667888L;    private String mName;    private String mPrice;    public String getmName() {        return mName;    }    public void setmName(String mName) {        this.mName = mName;    }    public String getmPrice() {        return mPrice;    }    public void setmPrice(String mPrice) {        this.mPrice = mPrice;    }}

在Activity中的使用

// serializable对象传递方法public void setSerializableMethod() {    Book book = new Book();    book.setmName("王海康");    book.setmPrice("20$");    Intent intent = new Intent(this, BookTest.class);    Bundle bundle = new Bundle();    bundle.putSerializable(SER_KEY, book);    intent.putExtras(bundle);    startActivity(intent);}// serializable对象获取方法public Book getSerializableMethod(){    Book mBook = (Book )getIntent().getSerializableExtra(SER_KEY);    return mBook;}

Parcelable接口的实现和使用
1)implements Parcelable。
2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从Parcel容器获取数据。
3)重写describeContents方法,内容接口描述,默认返回0即可。
4)实例化静态内部对象CREATOR实现接口Parcelable.Creator 。

public class Person implements Parcelable {    private String mName;    private String mSex;    private int mAge;    public String getmName() {        return mName;    }    public void setmName(String mName) {        this.mName = mName;    }    public String getmSex() {        return mSex;    }    public void setmSex(String mSex) {        this.mSex = mSex;    }    public int getmAge() {        return mAge;    }    public void setmAge(int mAge) {        this.mAge = mAge;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(mName);        dest.writeString(mSex);        dest.writeInt(mAge);    }    public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {        @Override        public Person createFromParcel(Parcel source) {            Person person = new Person();            person.mName = source.readString();            person.mSex = source.readString();            person.mAge = source.readInt();            return person;        }        //供反序列化本类数组时调用的        @Override        public Person[] newArray(int size) {            return new Person[size];        }    };

在Activity中的使用
1、传递单一对象的具体代码

// parcelable对象传递方法public void setParcelableMethod() {    Person person = new Person();    person.setmName("王海康");    person.setmSex("男");    person.setmAge(45);    Intent intent = new Intent(this, PersonTest.class);    Bundle bundle = new Bundle();    bundle.putParcelable(PAR_KEY, person);    intent.putExtras(bundle);    startActivity(intent);}// parcelable对象获取方法public Person getParcelableMethod(){    Person mPerson = (Person)getIntent().getParcelableExtra(PAR_KEY);    return mPerson;}

2、传递对象列表具体代码

// parcelable对象List传递方法public void setParcelableListMethod() {    ArrayList<Person> personList = new ArrayList<Person>();    Person person1 = new Person();    person1.setmName("王海康");    person1.setmSex("男");    person1.setmAge(45);    personList.add(person1);    Person person2 = new Person();    person2.setmName("薛岳");    person2.setmSex("男");    person2.setmAge(15);    personList.add(person2);    Intent intent = new Intent(this, PersonTest.class);    Bundle bundle = new Bundle();    bundle.putParcelableArrayList(PAR_LIST_KEY, personList);    intent.putExtras(bundle);    startActivity(intent);}// parcelable对象获取方法public ArrayList<Person> getParcelableMethod(){    ArrayList<Person> mPersonList = getIntent().getParcelableExtra(PAR_LIST_KEY);return mPersonList;}

注意事项:

1、对象序列化不会关注类中的静态变量
2、当某个字段被声明为transient后,默认序列化机制就会忽略改字段

参考文档:

浅谈Android序列化
这里写链接内容
这里写链接内容

更多相关文章

  1. Android(安卓)的属性动画的实现和使用详解
  2. Android的四个基本概念(线程通信和GLSurfaceView)
  3. 第四章-View的工作原理(MeasureSpec、LayoutParams)
  4. Android(安卓)特色开发,基于位置的服务
  5. 你不得不了解的JVM(一)
  6. Android实现语音数据实时采集、播放
  7. 【安卓开发】Android为什么选择binder
  8. Handler、Message、MessageQueue、Looper协作简析
  9. 第五章(2)Libgdx应用框架之启动类和配置

随机推荐

  1. 使用Android(安卓)Studio遇到的一些常见
  2. android中涉及的字体修改
  3. Handler与Android进程管理
  4. Android(安卓)开发日常积累
  5. Android中的TextView
  6. ubuntu下android源代码以及内核的获取
  7. android View setText NotFoundException
  8. 方法一、使用Handler和Thread(线程)实现定
  9. Android(安卓)popupWindow 用法
  10. android listview滑动设置浮标半透明效果