android Parcelable实现序列化
来源:互联网 发布:山东大学网络教育首页 编辑:程序博客网 时间:2024/04/29 01:44
android Parcelable接口使用
java中提供了Serializable序列化方法,android提供了Parcelable接口。
Parcelable接口定义:
public interface Parcelable { public int describeContents(); public void writeToParcel(Parcel dest, int flags); public interface Creator<T> { public T createFromParcel(Parcel source); public T[] newArray(int size); } public interface ClassLoaderCreator<T> extends Creator<T> { public T createFromParcel(Parcel source, ClassLoader loader); }}
describeContents()方法主要是对储存的一些特殊对象的描述,如果包含文件,就要返回 CONTENTS_FILE_DESCRIPTOR,一般返回 0 即可。
writeToParcel(Parcel dest, int flags)方法,将当前对象的数据存到Parcel对象内,该对象实现了一系列的存储基本数据。
Creator接口,内部有2个方法,第一个方法返回一个读取后的对象,第二个方法返回一组对象。实现Parcelable时,必须创建一个静态Creator的常量,重写2个方法。 Parcel内部读取数据时会用到该接口提供的2个方法。这个我能力有限,不能解释清楚。
ClassLoaderCreator是一个专门用来接收ClassLoader的接口,继承Creator。
Parcelable接口的一般使用代码:
public class Book implements Parcelable { public int bookId; public String bookName; public Book(int bookId, String bookName) { this.bookId = bookId; this.bookName = bookName; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(bookId); out.writeString(bookName); } public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() { @Override public Book createFromParcel(Parcel source) { return new Book(source); } @Override public Book[] newArray(int size) { return new Book[size]; } }; private Book(Parcel in) { bookId = in.readInt(); bookName = in.readString(); }}
这里要注意一点:public static final Parcelable.Creator< Book > CREATOR = new Parcelable.Creator< Book >() {}这一段代码必须存在,并且除了泛型不一样,2个内部实现可能不一样外,其它都必须这么写。因为Parcel会使用该接口。(我试着看了下Parcel代码,只能看懂一点~~)
在Activity通过Intent传递实现Parcelable接口的对象:
Intent i = new Intent(MainActivity.this, SecondActivity.class);i.putExtra("Book", mBook);startActivity(i);
获取Intent中的Book对象:
Intent i = getIntent();mBook = (Book) i.getParcelableExtra("Book");
当然也可以通过Bundle:
Intent i = new Intent(MainActivity.this, SecondActivity.class);Bundle bundle = new Bundle();bundle.putParcelable("Book", mBook);i.putExtras(bundle);startActivity(i);
从Bundle从获取对象:
Bundle bundle = getIntent().getExtras();mBook = (Book) bundle.getParcelable("Book");
Parcelable实现比Serializable麻烦,但是效率比较高,内存消耗比较小。适合跨进程通信。
- android Parcelable实现序列化
- Android 实现Parcelable接口序列化对象
- [Android] Parcelable接口实现序列化
- Android 序列化 Parcelable
- android序列化Parcelable
- Android序列化Parcelable
- Android Parcelable 序列化
- Android序列化:Parcelable
- Parcelable序列化实现方法
- Android序列化之Parcelable
- Android-序列化,Parcelable,Serializable
- android 序列化对象 Parcelable
- ANDROID 序列化Parcelable /Serializalble
- Android parcelable序列化
- Android Serializable Parcelable 序列化
- Android 序列化Serializable、Parcelable
- Android序列化:Serializable & Parcelable
- Android序列化Parcelable、Serializable
- Comparable与Comparator
- 经典决策树代码-信息增益
- 第8章 进程和程序:编写命令解释器sh
- Leetcode在线编程populating-next-right-pointers-in-each-node
- 算法-线性表的查找
- android Parcelable实现序列化
- modifyPicMD5.php 修改缓存md5
- Java 中Object类与equals方法
- 固定虚拟机下的Linux的IP地址每次启动时会自动变化
- Map的复习
- Java NIO 中 ServerSocketChannel和SocketChannel
- ec-final 上海打铁之旅
- 第11章 连接到近端或远端的进程:服务器与Socket(套接字)
- 【网络】云免流共享方法