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

Static data members in Android for passing complex data

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

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

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

应避免使用静态成员。这是 Android 中最糟糕的数据传递方式之一。静态对象持续存在于应用程序的生命周期之外。因此,用户可以退出您的应用程序,而您的数据仍然存在,因为 class 仍在 JVM 中加载。太糟糕了。

有时,Otto can be a good option for passing complex data around and it plays nicely with the Activity Lifecycle. Another alternative I've seen on many projects is good old fashioned listeners or callbacks. There's also intent services and local broadcast managers

共享复杂数据的方法有很多种。我认为 "static" 个对象是不可能的。像避开瘟疫一样避开它们。

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

  • 只能通过1访问process
  • 它包含的数据不包含对任何特定组件(Activity、片段、服务 e.t.c)的引用,除了应用程序(它无论如何都是静态单例)
  • 数据不保留对可能与数据具有不同生命周期的任何其他内容的引用
  • 数据太复杂或太大而无法合理序列化、打包或以其他方式通过 Bundle 传递,这样做会影响应用程序的性能。
  • 如果从不同的线程访问它是正确同步的
  • 数据得到正确管理并在不再需要时释放,避免泄漏存储数据所需的内存

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

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