您的位置:

Android Parcelable实现Java对象的序列化

Android开发中,我们需要在不同组件(Activity、Service、BroadcastReceiver等)之间传递数据,有的时候甚至需要把对象直接传递过去。这时候就需要对Java对象进行序列化。Java序列化和反序列化虽然非常方便,但是它的效率很低。而Android提供的Parcelable接口就解决了这个问题,它可以较为高效地序列化和反序列化数据,并且适合在内存之间传递对象。

一、Parcelable接口的介绍

Parcelable是Android特有的轻量级序列化方法。与Java的Serializable相比,Parcelable更快更轻巧,而且是一种显式的序列化方法。它通过将数据一次性写入或读取内存块来完成序列化和反序列化,相对而言效率更高。

Android平台中提供的许多类已经实现了Parcelable接口,例如Intent、Bundle和Cursor等。如果我们需要在自己的类中使用Parcelable,则需要实现Parcelable接口,并实现writeToParcel()和createFromParcel()这两个方法。

二、实现Parcelable接口

实现Parcelable接口需要以下几个步骤:

1、定义一个实现Parcelable接口的类:

public class User implements Parcelable {
    private String userName;
    private int age;

    //构造方法
    public User(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }

    //Getter和Setter方法
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //实现Parcelable接口
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.userName);
        dest.writeInt(this.age);
    }

    protected User(Parcel in) {
        this.userName = in.readString();
        this.age = in.readInt();
    }

    public static final Creator CREATOR = new Creator
   () {
        @Override
        public User createFromParcel(Parcel source) {
            return new User(source);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}

   
  

2、实现Parcelable接口中的抽象方法describeContents(),返回0即可。

3、实现Parcelable接口中的抽象方法writeToParcel(Parcel dest, int flags),将需要序列化的数据写入Parcel中。

4、实现Parcelable接口中的构造方法,将需要反序列化的数据读取出来。注意:读取数据的顺序必须与写入数据的顺序一致。

5、实现Parcelable接口中的CREATOR静态变量,用于反序列化数据。其中包含两个抽象方法createFromParcel(Parcel source)和newArray(int size)。

三、使用Parcelable序列化对象

使用Parcelable序列化Java对象需要以下几个步骤:

1、将需要传递的Java对象打包成Parcel对象:

User user = new User("Tom", 25);
Parcel parcel = Parcel.obtain();
user.writeToParcel(parcel, 0);

2、通过Bundle将Parcel对象传递给需要的组件,例如Activity:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("user", parcel);
intent.putExtras(bundle);
startActivity(intent);

3、将Parcel对象传递给需要的组件:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Parcel parcel = bundle.getParcelable("user");
User user = User.CREATOR.createFromParcel(parcel);

四、总结

Parcelable是Android特有的一种序列化方法,与Java的Serializable相比,Parcelable更快更轻巧,并且适合在内存之间传递对象。使用Parcelable序列化Java对象需要实现Parcelable接口,并实现writeToParcel()和createFromParcel()这两个方法。将需要传递的Java对象打包成Parcel对象,通过Bundle将Parcel对象传递给需要的组件,将Parcel对象传递给需要的组件并进行反序列化即可。

Android Parcelable实现Java对象的序列化

2023-05-14
Python实现Android对象序列化

2023-05-14
Kotlin-Parcelize:简化 Android Pa

2023-05-22
Android Intent传递对象封装方式

一、对象传递介绍 Android开发中经常需要将对象在Activity和Fragment或Service之间进行传递,并且需要保证传递的数据完整性和正确性。在Android中,传递对象可以使用Inte

2023-12-08
AndroidIntent传递对象

2023-05-18
Android接口概述

2023-05-16
提高Android应用数据传递性能的有效方法

随着用户对Android应用性能的要求不断提高,如何提高应用程序在数据传递方面的性能变得尤为重要。本文将从使用Intent传递数据、使用Bundle传递数据、使用Parcelable、序列化和反序列化

2023-12-08
Android Parcel:轻松实现进程间通信

2023-05-14
Android AIDL:如何使用Android接口定义语言

2023-05-19
印象笔记记录java学习(Java成长笔记)

2022-11-12
Android页面跳转优化技巧

2023-05-20
提高APP页面加载速度的绝佳解决方案——Android路由技

2023-05-14
Android NFC应用场景及开发实战

2023-05-14
提高Android Studio开发效率的方法

2023-05-14
Python实现Android中JSON与对象的互转

2023-05-14
让你的Android应用数据持久化——序列化快速入门

2023-05-14
Android IPC通信方式及其实现

2023-05-14
深入了解 Android MMKV

2023-05-21
Android AIDL:在进程间传递数据和服务调用的解决方

一、AIDL 简介 AIDL(Android Interface Definition Language)是 Android 系统中用于进程间通信(IPC)的解决方案之一,支持服务端暴露接口,客户端通

2023-12-08
android的js框架(android js引擎)

本文目录一览: 1、Android真的推荐用MVI模式?MVI和MVVM有什么区别? 2、在Android上怎样实现JAVA和JS交互 3、android 混合开发 用什么框架好 4、Android如

2023-12-08