【问题标题】:Static data members in Android for passing complex dataAndroid中用于传递复杂数据的静态数据成员
【发布时间】:2015-05-07 10:46:45
【问题描述】:

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

但不知何故,我觉得这不是你应该这样做的方式,即使它似乎是最简单的方式。

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

【问题讨论】:

    标签: android android-activity static-members


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      有时,Otto 是传递复杂数据的好选择,它与活动生命周期配合得很好。我在许多项目中看到的另一种选择是老式的监听器或回调。还有intent serviceslocal broadcast managers

      有很多方法可以共享复杂的数据。我会认为“静态”对象不是首发。像瘟疫一样避开它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多