在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中的活动之间传递非原始类型的数据的主要内容,如果未能解决你的问题,请参考以下文章