`

Parcelable

阅读更多

Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是 Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现 Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。下面就介 绍一下实现Parcelable接口的方法
        通过实现Parcelable接口序列化对象的步骤:
        1、声明实现接口Parcelable
        2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
        3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:

Java代码  收藏代码
  1. public   static   final  Parcelable.Creator<T> CREATOR  


       其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。
        4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象

        简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对 象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不 过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
       
        Parcel对象可以通过以下方法写入或读取byte, double, float, int, long, String这6种类型变量。

Java代码  收藏代码
  1. writeByte( byte ), readByte()  
  2. writeDouble(double ), readDouble()  
  3. writeFloat(float ), readFloat()  
  4. writeInt(int ), readInt()  
  5. writeLong(long ), readLong()  
  6. writeString(String), readString()  



        也可以读取或写入他们的数组

Java代码  收藏代码
  1. writeBooleanArray( boolean []), readBooleanArray( boolean []), createBooleanArray()  
  2. writeByteArray(byte []), writeByteArray( byte [],  int int ), readByteArray( byte []), createByteArray()  
  3. writeCharArray(char []), readCharArray( char []), createCharArray()  
  4. writeDoubleArray(double []), readDoubleArray( double []), createDoubleArray()  
  5. writeFloatArray(float []), readFloatArray( float []), createFloatArray()  
  6. writeIntArray(int []), readIntArray( int []), createIntArray()  
  7. writeLongArray(long []), readLongArray( long []), createLongArray()  
  8. writeStringArray(String[]), readStringArray(String[]), createStringArray()  
  9. writeSparseBooleanArray(SparseBooleanArray), readSparseBooleanArray()  



        更多操作可以参阅:
http://developer.android.com/reference/android/os/Parcel.html
示例代码:

Java代码  收藏代码
  1. package  com.ipjmc.demo.parcelable;  
  2.   
  3.   
  4. import  java.util.Date;  
  5.   
  6. import  android.os.Parcel;  
  7. import  android.os.Parcelable;  
  8.   
  9. public   class  ParcelableDate  implements  Parcelable {  //声明实现接口Parcelable   
  10.   
  11.     //这里定义了两个变量来说明读和写的顺序要一致   
  12.     public   long  mId;  
  13.     public  Date mDate;  
  14.       
  15.     public  ParcelableDate( long  id,  long  time) {  
  16.         mId = id;  
  17.         mDate = new  Date(time);  
  18.     }  
  19.       
  20.     public  ParcelableDate(Parcel source) {  
  21.         //先读取mId,再读取mDate   
  22.         mId = source.readLong();  
  23.         mDate = new  Date(source.readLong());  
  24.     }  
  25.       
  26.     @Override   
  27.     public   int  describeContents() {  
  28.         return   0 ;  
  29.     }  
  30.   
  31.     //实现Parcelable的方法writeToParcel,将ParcelableDate序列化为一个Parcel对象   
  32.     @Override   
  33.     public   void  writeToParcel(Parcel dest,  int  flags) {   
  34.         //先写入mId,再写入mDate   
  35.         dest.writeLong(mId);  
  36.         dest.writeLong(mDate.getTime());  
  37.     }  
  38.   
  39.     //实例化静态内部对象CREATOR实现接口Parcelable.Creator   
  40.     public   static   final  Parcelable.Creator<ParcelableDate> CREATOR =  new  Creator<ParcelableDate>() {  
  41.           
  42.         @Override   
  43.         public  ParcelableDate[] newArray( int  size) {  
  44.             return   new  ParcelableDate[size];  
  45.         }  
  46.           
  47.         //将Parcel对象反序列化为ParcelableDate   
  48.         @Override   
  49.         public  ParcelableDate createFromParcel(Parcel source) {  
  50.             return   new  ParcelableDate(source);  
  51.         }  
  52.     };  
  53. }
分享到:
评论

相关推荐

    Android多进程通讯AIDL传递Parcelable对象

    1. AIDL只能传递基本数据类型、Parcelable对象和实现了Parcelable接口的数组。 2. 当传递复杂的对象结构时,需要确保所有对象都实现了Parcelable。 3. 跨进程通信可能会有性能开销,因此应谨慎使用。 4. 服务端需要...

    android序列化(Parcelable)

    Android提供了两种主要的序列化方式:`Serializable`和`Parcelable`。本文将深入探讨`Parcelable`,它是Android平台中效率更高的序列化接口。 **一、Parcelable简介** `Parcelable`是Android系统提供的一个接口,...

    安卓自带Parcelable序列化

    `Parcelable`是Android系统提供的一种高效的数据序列化方式,相比Java的`Serializable`接口,它的性能更优,因为`Parcelable`在序列化和反序列化时提供了更直接的内存操作。本篇文章将详细探讨`Parcelable`在Android...

    Android Parcelable code generator

    在Android studio 4.0+以后在插件中已经搜索不到Android Parcelable code generator这个超级好用的插件了,唯一能使用的方式就是下载离线插件包,进行离线安装。 File -&gt; Settings -&gt; Pugins -&gt; Install plugin from...

    android-parcelable-intellij-plugin自动Parcelable方式序列化.rar

    Android开发中的Parcelable接口是用于对象序列化的一种高效方式,它比Java自带的Serializable接口性能更好,但编写起来较为繁琐。`android-parcelable-intellij-plugin`是一个IntelliJ IDEA的插件,它可以帮助开发者...

    andridAidl通信,及传递Parcelable数据

    本教程将深入探讨如何使用AIDL进行进程间通信,并重点讲解如何传递Parcelable数据。 首先,让我们了解AIDL的基本概念。AIDL文件是一种特殊的文本文件,使用类似于Java的方法声明来定义服务接口。当编译项目时,...

    parcelable学生类使用简单案例

    在Android开发中,Parcelable接口是Android系统提供的一种高效的数据序列化方式,相比于Serializable接口,它在传递和存储数据时性能更高。本案例将探讨如何创建一个简单的Parcelable学生类,以便在Activity之间传递...

    Android序列化——Serializable与Parcelable

    本文将深入探讨两种主要的序列化方式:Serializable和Parcelable,并比较它们的优缺点以及适用场景。 首先,我们来了解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Android中,这个...

    GsonFormat、ButterKnife 、Parcelable

    GsonFormat、ButterKnife和Parcelable是三个非常实用的Android Studio插件,它们可以帮助开发者快速、高效地处理常见的编程任务。 1. GsonFormat GsonFormat是一个Android Studio插件,主要用于自动生成Gson序列化...

    通过实现Parcelable接口跨进程传递复杂数据

    此时,可以采用更高效的Parcelable接口来实现跨进程通信(IPC,Inter-Process Communication)。本主题将深入探讨如何通过实现Parcelable接口来传递复杂数据。 首先,了解Parcelable接口的基本概念。Parcelable是...

    Android通过Parcelable和Serializable实现各种类型嵌套序列化

    Android提供了两种主要的序列化方式:Parcelable和Serializable。这两种方式都可以将对象转换为字节流,便于存储、传输或恢复。下面将详细讨论Android通过Parcelable和Serializable实现各种类型嵌套序列化的方法。 ...

    Android 之 Parcelable 序列化

    Parcelable是Android平台提供的一种高效的数据序列化方式,比传统的Serializable接口性能更好,但使用起来也相对复杂。本文将深入探讨Android中的Parcelable接口及其序列化流程。 首先,`Parcelable`接口是Android...

    使用ParcelableDemo

    在Android开发中,Parcelable接口是Android系统提供的一种高效的数据序列化方式,相比于Java中的Serializable接口,它在数据传输和保存时具有更高的性能。本示例"ParcelableDemo"将详细介绍如何在Android应用中使用...

    Android Parcelable序列化自定义类集合在Activity间传递

    通常,我们使用Intent对象来完成这一任务,而Intent支持多种数据类型,包括基本类型、Parcelable接口实现的类以及Serializable接口实现的类。`Parcelable`是Android提供的一种高效的数据序列化方式,相比`...

    android-parcelable-intellij-plugin.jar

    android parcelable code generator

    Android Service学习之AIDL, Parcelable和远程服务

    本篇文章将深入探讨如何使用AIDL(Android Interface Definition Language)、Parcelable接口以及如何实现远程服务,这些都是Android Service开发中的关键知识点。 首先,我们来谈谈AIDL。AIDL是Android系统提供的...

    parcelable android demo

    在Android开发中,Parcelable接口是用于对象序列化的一种高效机制,相比Java的Serializable接口,它在数据传输和存储时性能更高。"parcelable android demo"是一个实战项目,旨在帮助开发者理解并掌握Parcelable的...

    实现Parcelable接口的方式借助Intent实现Android工程中Activity之间Java对象的传递.zip

    通常,我们使用Intent来在不同Activity之间传递数据,但当需要传递复杂对象时,如自定义的Java对象,就需要使用到Parcelable接口。这个压缩包文件"实现Parcelable接口的方式借助Intent实现Android工程中Activity之间...

    Parcelable in Android

    在Android开发中,Parcelable接口是用于对象序列化的一种高效机制,相比于Java的Serializable接口,它在数据传输或者存储时提供了更高的性能。理解并熟练使用Parcelable对于优化应用性能至关重要。 Parcelable接口...

Global site tag (gtag.js) - Google Analytics