在Android / Java中实现全局对象的优点和缺点是单例或数据类

时间:2011-11-26 07:24:18

标签: android singleton global-variables

关于如何在Android / Java中实现全局变量,有很多问题和答案。

因此,似乎可以实现单例或使用静态变量的数据类本身。

我即将开始一个更大的项目,并希望从右脚开始。

我只是不确定使用哪一个。

Pro singleton / con数据类

  • 据说是“更干净”的方式(但我真的不知道为什么)
  • 确保始终只有一个表示
  • 创建一个新实例,如果旧实例被“清除”(只要这可能发生?)

Con singleton / pro数据类

  • 一些人不推荐(但没有找到令人信服的理由)
  • 确保设计只有一种表示
  • 只需编写MyDataClass.x即可轻松访问(vs访问singleton需要先以某种方式访问​​它)
  • 无需将其作为参数传递

总而言之,我倾向于使用DataClass,但我不确定,因为我读到这应该是不合适的编程风格。

我想添加

非常感谢

2 个答案:

答案 0 :(得分:3)

实现单例的最佳方法是使用枚举。

public enum Singleton
{
    INSTANCE;

    public void someMethod()
    {
        // your code here
    }
}

有关详细信息,请参阅Effective Java (2nd Edition)

答案 1 :(得分:1)

首先:具有公共静态成员变量的类与单例类之间没有太大区别。许多开发人员更喜欢单例模式,因为代码看起来更自然,更多Java。例如。 Singleton.Data看起来像是一个持续访问,而Singleton.getData()看起来就像是在访问某种静态数据。

我个人使用静态应用程序模式:请参阅Accessing resources without an Activity or Context reference

您可以使用onCreate设置任何类型的静态数据甚至其他单例。例如。我更喜欢像这样设置一个单独的SQLite数据库,然后通过App.getDb()访问它。您可以使用此模式访问应用程序上下文或资源。

在使用静态数据时,您应该考虑内存韭菜。我建议先看一下this article