【问题标题】:Serialization performance problems between Activities活动之间的序列化性能问题
【发布时间】:2013-01-29 14:08:12
【问题描述】:

我有 2 个活动,我正在尝试从活动 A 向活动 B 发送一些实现可序列化的巨大对象。问题是 Android 操作系统序列化这些对象所花费的时间。有没有办法在活动之间发送参数?我尝试发送到 Application 对象并在下一个活动中获取它,但我认为这种方式很脏......

【问题讨论】:

  • 您是否考虑过使用这种方法:stackoverflow.com/a/4878259/644669
  • 是的,这是“正常”的方式。问题是当您在对象中有很多属性或它们的错误列表时

标签: android performance


【解决方案1】:

您可以使用以下一些替代方法,而不是通过SerializableParcelable 传递大量数据:

  • 如果您经常使用大量数据,您可能会考虑使用Service。它将保存数据、处理数据并在需要时交付。之后可以终止它。
  • 另一种方法是将这个大对象的引用放在Application 对象中(如this)。 “全局参考”通常听起来不太好,但在某些情况下建议这样做。更进一步,如果您仍然觉得它“脏”,您可以使用 WeakReference 并在它传递给第二个 Activity 并被它使用后立即摆脱它。
  • 或者,还有另一种方式,您可以考虑以单数Activity 完成所有工作(不启动第二个),然后只使用Views。当然,如果可能的话。

【讨论】:

  • 实际上,我认为作为临时解决方案,我与您提到的第 2 点非常相似。在我的情况下,第三个是不可能的,我想要一个针对所有 Activity 的解决方案,在这种情况下不是什么特别的东西。我对Service的想法很好奇,我没有Service的经验,你能解释一下吗?
  • @PaNaVTEC 当然,Service 是 IMO 中 Android 中最重要的组件之一。根据文档(参见:goo.gl/5u03z):“Service 是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。”所以它就像后台进程。它可以在 Activity 之外提供各种数据/处理,并且独立于它(但服务可以由一个启动)。稍后它也可能被 Activity 停止或在完成所有任务后自动停止。试一试! :)
【解决方案2】:

这正是 Android 创建 Parcelable 的原因,因为在这个用例中它可以胜过 Serializable

Android Parcelable and Serializable

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

【讨论】:

  • 我将实现更改为 Parcelable 但这仍然没有帮助,有巨大的对象,我可以看到一些改进,但仍然不足以享受美好时光。很明显,我没有在 Nexus 4 或 S3 上进行测试,而是在只有 1Ghz 处理器的摩托罗拉 XOOM 上进行测试。
  • 嗯,我能想到的另一个选择是像你一样使用 Application 对象。我已经通过应用程序中存在的全局变量(登录信息/状态)做到了这一点,并使用具有getInstance() 方法的管理器将它们设为静态变量,如果它是null,则创建对象,否则返回静态一。但是,如果您要传递的这些对象仅特定于使用它们的每个Activity,那么使用Application 对象可能会很浪费。我会说它并不像你想象的那么“肮脏”,并且在这种情况下是一种更常见的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多