Activity之间传递对象的Demo



在Android应用开发中,Activity是构成应用程序的基本单元,它们之间的通信是实现功能交互的重要环节。当我们需要在不同的Activity之间传递数据时,特别是涉及到对象实例的传递,就需要掌握特定的技巧。本篇将深入探讨如何在Android中进行Activity间的对象传递,并以"Test001"为例进行演示。 一、Intent:数据传递的基础 Intent是Android系统中用于启动一个Activity或Service,同时也可以用来在组件间传递数据。我们可以通过Intent的putExtra()方法来添加需要传递的数据,然后在接收端通过getExtra()方法获取。对于简单的数据类型(如String、Integer等),Intent可以直接处理。但当我们要传递的是自定义对象时,情况会有所不同。 二、Parcelable接口 Android提供了Parcelable接口,用于序列化和反序列化对象,使其可以在Intent中传递。为了让自定义对象能够通过Intent传递,我们需要让该类实现Parcelable接口。实现这个接口需要编写以下方法: 1. `public int describeContents()`:返回当前对象的内存引用,通常返回0。 2. `public void writeToParcel(Parcel dest, int flags)`:将对象的数据写入Parcel,以便序列化。 例如,假设我们有一个名为`User`的类,需要传递其实例: ```java public class User implements Parcelable { private String name; private int age; // 构造函数,getter和setter省略 @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } // 创建Parcelable构造函数,用于反序列化 public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel source) { return new User(source.readString(), source.readInt()); } @Override public User[] newArray(int size) { return new User[size]; } }; } ``` 三、使用Parcelable传递对象 在发送Activity中,我们可以这样创建Intent并添加对象: ```java User user = new User("Tom", 25); Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("user", user); startActivity(intent); ``` 在接收Activity中,我们通过getParcelableExtra()来获取对象: ```java Intent intent = getIntent(); User user = intent.getParcelableExtra("user"); ``` 四、Serializable接口 除了Parcelable,还可以选择实现Serializable接口来实现对象的序列化。这种方式相对简单,不需要手动实现writeToParcel()和describeContents()方法,但是序列化和反序列化的过程相比Parcelable更耗时,占用的存储空间也更大。 五、Bundle:更灵活的数据容器 Intent虽然可以直接传递数据,但有时我们可能需要更灵活的数据管理方式,这时可以考虑使用Bundle。Bundle类似于一个键值对的集合,可以存储各种类型的数据,包括自定义对象。在Intent中,我们可以先将对象放入Bundle,再将Bundle放入Intent: ```java User user = new User("Jerry", 30); Bundle bundle = new Bundle(); bundle.putParcelable("user", user); Intent intent = new Intent(this, ThirdActivity.class); intent.putExtra("bundle", bundle); startActivity(intent); // 在接收Activity中 Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra("bundle"); User user = bundle.getParcelable("user"); ``` 总结: 在Android中,Activity之间的对象传递主要依赖于Intent、Parcelable接口、Serializable接口以及Bundle。Parcelable接口提供高效的数据传输,适用于频繁的数据交换;Serializable接口使用简单,但效率较低;而Bundle则为数据封装提供了更大的灵活性。了解并熟练运用这些技术,能帮助开发者更高效地进行Activity间的通信。在实际项目中,根据需求和性能考虑,选择合适的对象传递方式至关重要。







































































































































- 1

- 兴城20162019-06-13大骗子,草

- 粉丝: 108
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 用于车身控制模块的单片机和本地互连网络的作用.docx
- 综合性学习《我们的互联网时代》ppt课件1.ppt
- 社会网络分析-凝聚子群PPT课件.ppt
- 计算机操作员填空题及答案.doc
- 基于单片机的智能小车文献综述(超详细).doc
- 高中数学1.循环结构的程序框图的算法公开课获奖课件.pptx
- 智能无线网络WIA产品及其解决方案探析.doc
- 基因工程及其应用教案{公开课).doc
- 神经网络-第二章-单层前向网络及LMS算法.ppt
- 网络优化部绩效考核实施办法.doc
- 软件课程设计员工信息管理系统.doc
- 软件工程方法与实践课后答案.pdf
- 职位说明书(Job-Description)模板.doc
- 互联网展示类广告新趋势-从买媒体到买人群-互联网新趋势.doc
- 是网络录像带租赁系统是基于收入共享的观念.pptx
- 非标自动化电气设计流程与规范标准详.doc


