关于如何在Android/Java中实现全局变量有很多问题和答案。
因此,似乎可以实现单例或使用数据类本身的静态变量。
我即将开始一个更大的项目,我想从好的方面开始。
我只是不知道该用哪一个。
prosingleton/con Data Class
- 被认为是"更干净"的方式(但我真的不知道为什么)
- 确保始终只有一种表示
- 创建一个新实例,如果旧的实例被"清除"(无论何时可能发生?)
consingleton/pro Data Class
- 不被一些人推荐(但没有找到令人信服的理由)
- 确保通过设计只有一种表示
- 非常容易通过编写MyDataClass访问。
- 不需要作为参数传递
所以总的来说,我倾向于使用DataClass,但我不确定,因为我读到这应该不是好的编程风格
我喜欢添加
- 这个全局对象必须持有的数据非常大,超过30,000个字符串/键。这不应该在任何阶段清理,以便当应用程序返回时,它可能会崩溃,因为我在其他地方读如单例vs.应用程序上下文在Android?(第三个答案)
- 这不是一个web应用程序,我只使用一个类加载器
- 它是多线程的,但是实际上只有一个线程在访问这个数据
- 当然也可以使用这种方法如何在Android中声明全局变量?,但是在这种情况下,ObjectClass不是更容易使用和访问吗?
- 检查此http://developer.android.com/resources/faq/framework.html,特别是在"持久对象"下,意味着在这些情况下无论如何都没有真正的优势。
多谢
实现单例的最好方法是使用enum。
public enum Singleton
{
INSTANCE;
public void someMethod()
{
// your code here
}
}
有关详细信息,请参阅Effective Java(第二版)
首先:具有公共静态成员变量的类与单例类之间没有太大区别。许多开发人员更喜欢单例模式,因为它的代码看起来更自然,更Java化。例如,Singleton.Data
看起来像一个常量访问,而Singleton.getData()
看起来像你正在访问某种静态数据。
我个人使用静态应用程序模式:参见在没有活动或上下文引用的情况下访问资源
您可以使用onCreate
来设置任何类型的静态数据甚至其他单例。例如,我更喜欢这样设置一个单例SQLite数据库,然后通过App.getDb()
访问它。您可以使用此模式访问应用程序上下文或资源。
在使用静态数据时,应该考虑内存问题。我建议你去看看这篇文章。