Android中的静态数据成员用于传递复杂数据

时间:2015-05-07 10:46:45

标签: android android-activity static-members

我一直想知道这个question on stack overflow解决方案在Android上传递复杂数据的一个解决方案是使用静态数据成员。

但不知怎的,我觉得这不是你应该怎么做的方式,即使你看起来这是最简单的方法。

因此,我的问题是使用静态成员传递复杂数据的缺点是什么。

2 个答案:

答案 0 :(得分:1)

应避免使用静态成员。这是在Android中传递数据的最糟糕方式之一。静态对象持续超出应用程序的生命周期。因此,用户可以退出您的应用程序,并且您的数据仍然存在,因为该类仍然在JVM中加载。那非常糟糕。

有时,Otto可以是传递复杂数据的好选择,它可以很好地与Activity Lifecycle一起使用。我在许多项目中看到的另一种选择是老式的听众或回调。还有intent serviceslocal broadcast managers

有很多方法可以共享复杂的数据。我认为“静态”物体不是起动器。像瘟疫一样避免它们。

答案 1 :(得分:1)

如果满足所有这些条件,则可以使用在组件之间传递数据的静态引用:

  • 只能通过1 process
  • 访问
  • 它包含的数据不包含对任何特定组件(Activity,Fragment,Service e.t.c)的引用,但Application除外(无论如何都是静态单例)
  • 数据不会引用任何可能与数据生命周期不同的其他内容
  • 数据过于复杂,或大到合理地序列化,包裹或以其他方式通过Bundles传递,这样做会影响应用程序的性能。
  • 如果从不同的线程访问,则会正确同步
  • 不再需要时正确管理和释放数据,避免泄漏存储所需的内存

由于这些条件非常严格,因此采用不同的方法(gmale建议的方法)通常会更好。

我认为最大的缺点是静态数据的管理 - 通常很难判断何时不再需要数据以及何时可以释放数据。