android Intent传递对象数据
在Android开发中,Intent是应用程序之间以及应用程序组件之间进行交互的一种重要方式。它用于启动新的Activity、Service或者向BroadcastReceiver发送消息。然而,Intent默认只能传递基本数据类型,如String、int等。当我们需要传递复杂的数据结构,如自定义对象时,就需要利用`Serializable`或`Parcelable`接口来实现。下面将详细介绍这两种方法。 ### 1. `Serializable`接口 #### (1) 实现过程 你需要让你的自定义对象实现`Serializable`接口。例如: ```java public class MyObject implements Serializable { //... } ``` 然后,在创建Intent时,你可以通过`putExtra()`方法将对象序列化后传递: ```java Intent intent = new Intent(context, TargetActivity.class); intent.putExtra("myObject", myObject); startActivity(intent); ``` 在接收方,使用`getSerializableExtra()`获取对象: ```java MyObject receivedObject = (MyObject) getIntent().getSerializableExtra("myObject"); ``` #### (2) 优缺点 - **优点**:实现简单,无需额外的代码。 - **缺点**:性能较差,因为序列化和反序列化过程相对耗时;占用的内存和存储空间较大。 ### 2. `Parcelable`接口 #### (1) 实现过程 相比`Serializable`,`Parcelable`接口提供了更高效的序列化和反序列化机制。你需要实现`writeToParcel()`和`createFromParcel()`方法: ```java public class MyObject implements Parcelable { //... @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // 将对象成员写入Parcel } public static final Creator<MyObject> CREATOR = new Creator<MyObject>() { @Override public MyObject createFromParcel(Parcel in) { // 从Parcel中创建对象实例 return new MyObject(in); } @Override public MyObject[] newArray(int size) { return new MyObject[size]; } }; } ``` 在Intent中传递和接收对象: ```java Intent intent = new Intent(context, TargetActivity.class); intent.putExtra("myObject", myObject); startActivity(intent); // 在TargetActivity中 MyObject receivedObject = getIntent().getParcelableExtra("myObject"); ``` #### (2) 优缺点 - **优点**:性能优秀,是Android系统推荐的传递对象的方式,因为它在内存和时间效率上都优于`Serializable`。 - **缺点**:实现过程相对复杂,需要手动处理每个字段的序列化和反序列化。 ### 结论 对于简单的对象传递,`Serializable`接口可能就足够了。但当需要频繁传递大量数据或关心性能时,应优先考虑使用`Parcelable`接口。在实际开发中,可以根据项目需求和性能测试结果来选择合适的方法。同时,为了代码的可读性和维护性,可以使用一些工具库(如AutoValue、Parceler等)来自动化`Parcelable`的实现过程。
- 1
- Lowchai2013-10-17还可以,对于对象中含有对象的传递好像不行
- bawomingtian1232014-08-04测试了一下可以用
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助