Android 通过Intent使用Bundle传递对象详细介绍
在Android开发中,Intent是应用程序之间以及应用程序内部组件之间通信的主要手段。Intent通常用于启动新的Activity或者Service,而在Intent中传递数据时,Bundle是常用的工具。本文将详细讲解如何通过Intent使用Bundle在Android中传递对象。 我们需要知道在Android中,如果想要通过Intent传递一个对象,这个对象必须是可序列化的。在Java中,有两种基本的序列化方式:`java.io.Serializable` 和 `android.os.Parcelable`。虽然两者都可以用来序列化对象,但它们在性能和使用场景上存在差异。 1. **Serializable** 是Java的标准序列化接口,实现简单,只需要在类上添加`implements Serializable`即可。然而,它的性能较低,因为在序列化和反序列化过程中会产生大量临时变量,可能导致频繁的垃圾回收(GC)操作。此外,Serializable序列化的数据并不适合持久化存储,因为它无法保证在外界发生变化时数据的一致性。 2. **Parcelable** 是Android提供的高性能序列化接口,适用于在内存中传递对象。相比于Serializable,Parcelable的序列化和反序列化速度更快,因此在Intent和Bundle中传递对象时,推荐使用Parcelable。然而,Parcelable的实现相对复杂,需要手动编写读写Parcel的代码,并且不适用于需要将数据存储在磁盘上的场景。 接下来,我们将展示如何创建这两种类型可序列化对象的示例: **Serializable方式**: ```java public class PersonSer implements Serializable { private static final long serialVersionUID = -7620435178023928252L; private String name; private int age; // getters and setters... } ``` **Parcelable方式**: ```java public class PersonPar implements Parcelable { private String name; private int age; // getters and setters... public static final Parcelable.Creator<PersonPar> CREATOR = new Creator<PersonPar>() { public PersonPar createFromParcel(Parcel source) { PersonPar personPar = new PersonPar(); personPar.name = source.readString(); personPar.age = source.readInt(); return personPar; } public PersonPar[] newArray(int size) { return new PersonPar[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } } ``` 使用Intent和Bundle传递对象的步骤如下: 1. 创建对象并序列化: - 对于Serializable对象,直接将其赋值给Bundle的putSerializable方法。 - 对于Parcelable对象,使用Bundle的putParcelable或putParcelableArray方法。 2. 将Bundle附加到Intent: ```java Bundle bundle = new Bundle(); bundle.putSerializable("key", personSer); // Serializable bundle.putParcelable("key", personPar); // Parcelable Intent intent = new Intent(context, TargetActivity.class); intent.putExtra("bundleKey", bundle); ``` 3. 在接收端获取对象: - 使用getSerializable或getParcelable从Intent的extras中提取对象。 ```java Bundle bundle = getIntent().getExtras(); PersonSer personSer = (PersonSer) bundle.getSerializable("key"); // Serializable PersonPar personPar = bundle.getParcelable("key"); // Parcelable ``` Android开发中,Intent结合Bundle提供了一种方便的方式来传递对象。尽管Serializable接口简单易用,但考虑到性能因素,Parcelable是更优的选择,尤其是在Intent的使用场景中。不过,对于简单的数据结构,Serializable也是一个不错的选择。
- 粉丝: 3
- 资源: 887
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 自动化应用驱动的容器弹性管理平台解决方案
- 各种排序算法 Python 实现的源代码
- BlurAdmin 是一款使用 AngularJs + Bootstrap实现的单页管理端模版,视觉冲击极强的管理后台,各种动画效果
- 基于JSP+Servlet的网上书店系统源代码项目包含全套技术资料.zip
- GGJGJGJGGDGGDGG
- 基于SpringBoot的毕业设计选题系统源代码项目包含全套技术资料.zip
- Springboot + mybatis-plus + layui 实现的博客系统源代码全套技术资料.zip
- 智慧农场小程序源代码全套技术资料.zip
- 大数据技术毕业设计源代码全套技术资料.zip
- renren-ui-nodejs安装及环境配置