在android的Intent中,我可能要传递一些复杂的数据类型,如list、或者自己定义的实体类,我们不能像传递String、int一样传递它。这时候我们应该把自定义的类型序列化。有两种方式来实现序列化,一种是实现Serializable接口,一种是实现Parcelable接口。两者的区别:实现Serializable比较简单,实体类直接implements Serializable即可;Parcelable接口使用稍微复杂,但是代码运行效率更优秀,提高代码性能。本篇主要讲怎样实现类的Parcelable

 参考文章:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html

                    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0204/3944.html

  Parcelable的源码:

public interface Parcelable {        public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;        public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;        //内容描述方法,可以不看    public int describeContents();        //相当于将实体类写入Parcel方法,    public void writeToParcel(Parcel dest, int flags);    //读取接口    public interface Creator {                public T createFromParcel(Parcel source);                public T[] newArray(int size);    }}

Parcelable使用步骤

      1. implements Parcelable 实现Parcelable的方法

      2.重写writeToParel方法,将实体类的参数写入

      3.重写describeContentes方法,默认返回0即可

      4.实例化静态内部对象CREATOR实现接口Parcelable.Creator

      理解:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象,也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,再通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

Parcelable示例:

import android.os.Parcel;import android.os.Parcelable;/** * Created by 4 on 2016/4/6. */public class Student implements Parcelable{    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    //内容描述方法    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(name);        dest.writeInt(age);    }    private static final Parcelable.Creator CREATOR = new Parcelable.Creator(){        @Override        public Student createFromParcel(Parcel source) {            return new Student(source);        }        @Override        public Student[] newArray(int size) {            return new Student[size];        }    };        protected Student(Parcel parcel){        this.name = parcel.readString();        this.age = parcel.readInt();    }}

在Android Studio中可以快速实现对象的Parcelable化

    1.安装Android Parcelable code generator插件

        打开File ---> Settings ---> Plugins ---> Browse repositories...

        

   

   

   

   

   

   重启Android studio,显示下图,则说明安装成功

   

   使用插件Parcelable化对象,右键对象空白处,选择 Generate(生成)---->Parcelable--->OK

   

   生成的代码:

import android.os.Parcel;import android.os.Parcelable;/** * Created by 4 on 2016/4/5. */public class Book implements Parcelable {    private String bookName;    private int bookNum;    public String getBookName() {        return bookName;    }    public void setBookName(String bookName) {        this.bookName = bookName;    }    public int getBookNum() {        return bookNum;    }    public void setBookNum(int bookNum) {        this.bookNum = bookNum;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(this.bookName);        dest.writeInt(this.bookNum);    }    public Book() {    }    protected Book(Parcel in) {        this.bookName = in.readString();        this.bookNum = in.readInt();    }    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {        @Override        public Book createFromParcel(Parcel source) {            return new Book(source);        }        @Override        public Book[] newArray(int size) {            return new Book[size];        }    };}

   

更多相关文章

  1. android service 通过broadcast通知Myreceiver 启动activity
  2. Android之Content Providers
  3. Android(安卓)LruCache原理及使用(对象软引用不行,使用LRU算法)
  4. 【Android】Handler、Looper源码分析
  5. android 关系型数据库 SQLiteDatabase的 增 删 改 查
  6. Android(安卓)通过 Intent 传递类对象或list对象
  7. Android之handler篇
  8. Android(安卓)HandlerThread的用法
  9. Android(安卓)studio 快捷键汇总

随机推荐

  1. mysql有时查询很慢的原因?
  2. MySQL 笔记(三)由 txt 文件导入数据
  3. MySQL 事务没有提交导致锁等待
  4. SQL Server基础知识之:设计和实现视图
  5. sql plus如何新建新用户
  6. mysql 配置 explicit_defaults_for_times
  7. 怎么用SQL语句实现表中的一个字段加1啊??
  8. mysql表名忽略大小写
  9. ySQL 4.*或5.0.*的升级指南
  10. 如果至少有一条记录的值为1,则返回“是”