替换 Parcelable 接口的最佳实践

Posted

技术标签:

【中文标题】替换 Parcelable 接口的最佳实践【英文标题】:Best practice for replacinng the Parcelable interface 【发布时间】:2012-07-23 12:51:54 【问题描述】:

我通常使用接口Parcelable 将数据从一个活动传递到另一个活动。如果数据不多,它工作正常。但是,在某些情况下,我必须将大量数据传递给 Activity。这些数据的编组似乎没有任何错误,但解组会导致如下错误:

07-23 14:26:34.215: E/androidRuntime(29379): java.lang.OutOfMemoryError: java.lang.Object[] of length 1075971147 exceeds the VM limit

似乎要解组的数据太多了。一个非常hackish的解决方案(我真的不喜欢)是给那个特殊的Activity一个静态方法来传递数据给它,在onCreate()寻找它。这至少适用于我可以控制源的活动,但如果我没有,则会失败。

我想知道是否还有其他可接受的尝试,将一堆数据从一个 Activity 传递到另一个。如果我可以重用我已经为 Parcelable 接口编写的一些代码,那就太好了,但这不是必需的

【问题讨论】:

可能有其他解决方案可以传递这么多数据,具体取决于数据的类型。您能否详细说明您试图在活动之间传递什么样的东西? 我必须通过业务模型对象。这些通常包含 rawTypes 或其他 parcelable-business-model 对象,这些对象再次包含原始类型(字符串、整数、浮点数、布尔值)。 【参考方案1】:

如何创建一个全局变量(如here 所述)?曾经有一段时间我在同一个问题上苦苦挣扎,最后我发现这一切都在工作(尽管我不能说“全球”似乎是一种“好的做法”)。

【讨论】:

我认为这正是重点:global 在任何情况下(让它成为单例或静态成员)在我看来都是糟糕的设计。假设有超过 50 个活动,只有 1 个需要 global 信息。我不喜欢存储它globally 以防万一 Activity XX 需要访问它。 我知道你的意思,不能再同意了。但是活动是非常独立的实体,除了使用SerializableParcelable 或全局变量之外,我还没有看到任何其他方式在它们之间发送数据。【参考方案2】:

如何使用总线架构(EventBus/Otto),然后您可以在任何 Android 组件之间传输任何 POJO。

【讨论】:

以上是关于替换 Parcelable 接口的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

编码最佳实践——单一职责原则

RESTful API 设计最佳实践

设计模式——软件API设计最佳实践指南小结

设计模式——软件API设计最佳实践指南小结

《接口测试最佳实践》回归

n 层架构 - BLL、DAL 和接口。啥是最佳实践?