Android Intent对象传递:Serializable与Parcelable实例详解

0 下载量 25 浏览量 更新于2024-08-31 收藏 56KB PDF 举报
在Android开发中,Intent是Android四大组件之一,用于在应用程序内部或不同应用之间传递数据。本文将详细介绍如何通过Intent传递对象,重点讲解两种主要方式:通过Bundle实现Serializable接口和通过Bundle实现Parcelable接口。 首先,我们来理解Serializable和Parcelable的区别。Serializable是Java中的序列化接口,当对象需要跨进程或存储时,需要实现Serializable接口,Android系统会自动生成序列化和反序列化的机制来处理这些对象。而Parcelable接口则是一个更轻量级的选择,它由Android系统直接支持,性能更好,且适用于Android的IPC(进程间通信)场景。 在我们的示例项目"ObjectTestDemo"中,开发者创建了一个简单的布局文件,包含两个按钮,分别对应于"Serializable"和"Parcelable"两种传递方式: 1. Serializable传递: 点击"Serializable"按钮后,通常我们会将一个实现了Serializable接口的对象放入Bundle中。例如,假设有一个名为Person的类,我们首先需要确保它实现了Serializable接口: ```java public class Person implements Serializable { // 类属性和方法... } ``` 在Activity中,我们可以通过以下方式将Person对象放入Intent并启动另一个Activity: ```java Intent intent = new Intent(this, NextActivity.class); Person person = new Person(); Bundle bundle = new Bundle(); bundle.putSerializable("personKey", person); intent.putExtras(bundle); startActivity(intent); ``` 接收端在NextActivity中通过`getSerializableExtra()`方法获取这个对象: ```java Person receivedPerson = (Person) getIntent().getSerializableExtra("personKey"); ``` 2. Parcelable传递: 对于Parcelable接口,我们同样创建一个Person类,但在类声明上添加`@.Parcelable`注解,并实现`writeToParcel()`和`describeContents()`方法。例如: ```java @.Parcelable public class Person implements Parcelable { // 类属性和方法... @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // 实现写入Parcel的方法 } } ``` 将Person对象放入Intent的方式类似,但使用的是`putParcelableExtra()`: ```java intent.putExtra("personKey", person); ``` 在接收端,使用`getParcelableExtra()`获取并解析对象: ```java Person receivedPerson = (Person) getIntent().getParcelableExtra("personKey"); ``` 总结来说,选择哪种方式取决于具体需求。如果对性能有较高要求或者需要跨进程通信,通常推荐使用Parcelable;而对于简单的序列化场景,Serializable是一个不错的选择。通过理解和实践这两种方式,开发者可以更灵活地在Android应用中传递对象数据。