Android Parcelable接口使用方法详解

yizhihongxing

首先介绍一下Parcelable接口,它是Android平台内部用于进程间通信(IPC)的一个轻量级序列化框架,相比较于Java自带的Serializable接口,Parcelable接口在性能方面有更好的表现。

一、实现Parcelable接口

要使用Parcelable接口,需要先实现它。具体实现过程如下所示:

1.在实体类中实现Parcelable接口

public class MyEntity implements Parcelable {
    private int id;
    private String name;

    // 构造函数
    public MyEntity(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 读取顺序必须和写入顺序相同
    protected MyEntity(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

    // 必须实现此方法
    public static final Creator<MyEntity> CREATOR = new Creator<MyEntity>() {
        @Override
        public MyEntity createFromParcel(Parcel in) {
            return new MyEntity(in);
        }

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

    // 写入顺序必须和读取顺序相同,否则会报错
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }

    // 必须实现此方法,返回0即可
    @Override
    public int describeContents() {
        return 0;
    }

    // 省略getter和setter方法
}

2.重写读取、写入、创建、描述方法

Parcel对象提供了一组用于读写的方法,需要在实体类中重写以下四个方法:

  • readFromParcel(Parcel in):从Parcel对象中读取需要的数据,读取顺序必须和写入顺序相同
  • writeToParcel(Parcel dest, int flags):将需要传递的数据写入Parcel对象,写入顺序必须和读取顺序相同
  • CREATOR:用于反序列化Parcel对象,创建MyEntity实例的时候调用
  • describeContents():返回额外标志位信息,一般设置为0即可

二、将Parcelable对象传递给其他组件

1.传递Parcelable对象

Parcelable对象通常被用于Intent或者Bundle中进行传递:

// 创建Parcelable对象
MyEntity entity = new MyEntity(1, "MyEntity");

// 将Parcelable对象放入Intent中进行传递
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("entity_key", entity);
startActivity(intent);

2.获取Parcelable对象

在NextActivity中获取Parcelable对象的方法如下所示:

// 获取Parcelable对象,在onCreate方法中调用
MyEntity entity = getIntent().getParcelableExtra("entity_key");

三、代码示例

这里提供两个示例以说明Parcelable接口的使用方法。

  1. 实现Parcelable接口

假设有如下实体类:

public class MyEntity implements Parcelable {
    private int id;
    private String name;

    public MyEntity(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public MyEntity(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

    public static final Creator<MyEntity> CREATOR = new Creator<MyEntity>() {
        @Override
        public MyEntity createFromParcel(Parcel in) {
            return new MyEntity(in);
        }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }

    @Override
    public int describeContents() {
        return 0;
    }
}
  1. 在Activity中使用Parcelable对象传递数据
public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyEntity entity = new MyEntity(1, "MyEntity");
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra("parcel_key", entity);
                startActivity(intent);
            }
        });
    }
}
  1. 在SecondActivity中获取Parcelable对象
public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        MyEntity entity = getIntent().getParcelableExtra("parcel_key");
        Toast.makeText(this, entity.getId() + ", " + entity.getName(), Toast.LENGTH_SHORT).show();
    }
}

通过以上两个示例,我们可以直观地感受到Parcelable接口的使用方法,并且更好地理解其具体实现过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Parcelable接口使用方法详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • OpenCV基于ORB算法实现角点检测

    OpenCV基于ORB算法实现角点检测 什么是ORB算法 ORB算法是Oriented FAST and Rotated BRIEF的简称,是一种用于特征点检测和配准的算法。相比于传统的SIFT和SURF算法,ORB算法不仅速度更快,而且具有更好的旋转不变性。 OpenCV中的ORB算法 OpenCV是一个广泛使用的开源计算机视觉库,它提供了许多有用的图像处…

    other 2023年6月27日
    00
  • K8S中Pod重启策略及重启可能原因详细讲解

    K8S中Pod重启策略及重启可能原因 在Kubernetes中, Pod是最小的可部署的单元,可以容纳一个或多个容器。然而在Kubernetes中,任何一种资源都是有限的,在某些情况下,Pod可能会被重启,以保持系统的正常运行。在本文中,我们将详细讲解Kubernetes中Pod重启策略及重启可能原因。 重启策略 Pod有三种重启策略,分别是: Always…

    other 2023年6月27日
    00
  • 支付宝、微信、qq收款二维码三合一

    以下是关于“支付宝、微信、qq收款二维码三合一”的详细攻略,包括基本概念、使用方法和两个示例。 基本概念 支付宝、微信、qq款二码三一是指将支付宝、微信、qq三个平台的收款二维码合并成一个二维码,方便进行收款。这种方式可以减少用户的操作步骤,提高用户的使用体验。 使用方法 以下是使用支付宝、微信、收二维码三合一的方法: 打开支付宝、微信、qq款页面,分别获取…

    other 2023年5月7日
    00
  • 一篇文章带你了解Java泛型的super和extends

    一、Java泛型的super和extends Java泛型中的extends和super是两个非常重要的关键字,它们可以用来限定泛型的类型范围。一个类型可以使用extends关键字限制范围上界,使用super关键字限制范围下界。 上界使用extends关键字来表示,它的作用是限定参数的类型只能是继承自某个类的子类或某个实现了某个接口的实现类。下界使用supe…

    other 2023年6月27日
    00
  • 小米10开发者选项在哪?小米10开启开发者选项的方法

    我来为您详细讲解一下“小米10开发者选项在哪?小米10开启开发者选项的方法”。 1. 小米10开发者选项在哪? 在小米10上,开发者选项默认是隐藏的,需要您手动将其打开。操作步骤如下: 1.打开小米10设置应用。 2.向下滚动并找到“关于手机”选项并点击进入。 3.找到“MIUI版本”并点击7次。 4.出现“您现在是开发者”的提示,这时候,您就可以前往设置菜…

    other 2023年6月26日
    00
  • Android 内存溢出和内存泄漏的问题

    Android 内存溢出和内存泄漏问题攻略 1. 内存溢出问题 内存溢出是指应用程序在申请内存时,没有足够的可用内存供其使用,导致程序崩溃或异常终止。以下是解决内存溢出问题的一些步骤: 步骤一:分析内存使用情况 使用Android Profiler或其他性能分析工具来监测应用程序的内存使用情况。观察内存使用的峰值和变化趋势,找出可能导致内存溢出的原因。 步骤…

    other 2023年8月1日
    00
  • 操作系统的功能

    操作系统是一种管理计算机硬件与软件资源的系统软件。它可以协调不同的应用程序、管理系统资源,以及处理计算机的输入与输出等操作,使得计算机可以更加高效、稳定地运行。 操作系统的主要功能如下: 进程管理 操作系统负责分配和管理计算机系统的进程,确保它们在不同的阶段下拥有足够的资源和优先级。例如,在一个多任务系统中,操作系统可以保证计算机的 CPU 时间被正确地分配…

    其他 2023年4月16日
    00
  • Android原生态实现分享转发功能实例

    Android原生态实现分享转发功能实例攻略 介绍 在Android应用中实现分享转发功能是一项常见的需求。本攻略将详细介绍如何使用Android原生态实现分享转发功能,并提供两个示例说明。 步骤 步骤一:添加分享按钮 首先,在你的布局文件中添加一个分享按钮,可以使用ImageButton或者ImageView来实现。例如: <ImageButton …

    other 2023年9月7日
    00
合作推广
合作推广
分享本页
返回顶部