在android中的活动之间传递非原始类型的数据

Posted

技术标签:

【中文标题】在android中的活动之间传递非原始类型的数据【英文标题】:Passing data of a non-primitive type between activities in android 【发布时间】:2010-11-29 08:05:50 【问题描述】:

假设您想启动一个新活动并从当前活动中传递一些数据。如果数据是原始类型,您可以简单地使用意图并添加额外内容,但是对于更复杂的数据结构,如数组列表或对象,您将如何做到这一点?

【问题讨论】:

【参考方案1】:

你有几个选择:

    您可以将更复杂的结构包装在实现Parcelable 接口的类中,该接口可以存储在额外的 您可以将更复杂的结构包装在实现Serializable 接口的类中,该接口可以存储在额外的 您使用静态数据成员来传递东西,因为它们都在同一个进程中 您使用外部存储(文件、数据库、SharedPreferences) 正如刚刚发帖的人所说,使用通用组件,例如自定义Application 或本地Service

你不想做的是通过额外的东西传递大的东西。例如,如果您正在创建一个从相机中抓取图片的应用程序,您不希望通过额外的内容传递这些 - 使用静态数据成员(听起来很恶心)。 Intent 被设计为跨进程工作,这意味着会进行一定数量的数据复制,当不需要大数据时,您希望避免这种情况。

【讨论】:

我怀疑的一堆选项。谢谢!对于这个特定的项目,我选择了第 3 个选项。它不是很漂亮,但它可以完成工作! 我是 Parcelables 的忠实粉丝...它们易于构建且易于通过。 我讨厌他们。它们是维护的噩梦,非常容易出错。与简单地将对象作为 Serializable 传递相比的唯一优势是性能更好。 ***.com/questions/2906925/… - 用于选项 1 和 2。 parcelabler.com 在尝试使用 Parcelables 时非常方便,希望对某人有所帮助:)【参考方案2】:

我知道的一个选项是将您正在使用的数据存储在 Application 对象中,您的所有活动都可以从上下文中检索该对象。

我也听说过使用Google Protocol Buffer 来实现更高性能的解决方案

【讨论】:

我读过一些反对Appication Object的帖子,例如developerphil.com/dont-store-data-in-the-application-object

以上是关于在android中的活动之间传递非原始类型的数据的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中如何在Activity跳转之间传递数据

使用自定义对象时在活动android之间传递数据时出错

Android:如何在包含其他对象的活动之间传递对象

JavaScript--函数-按值传递

Android 在活动之间传递大对象的最佳实践?

具有非原始类型的 C++ 值传递?