我最近被告知扩展应用程序类以将其用作Singleton是一种不好的做法,但没有任何解释。
那么使用这个类背后的潜在问题是什么?我已经看到它在许多项目中使用过。
另外,如果使用Application Class是一个坏主意,那么存储应用程序级变量的替代方法是什么?
答案 0 :(得分:7)
使用Singleton方法并不是一个坏主意,但在多线程环境中使用时可能会很麻烦,其中一个线程将值设置为变量而另一个线程可能覆盖该值没有任何通知。
但是,为了保留应用程序级实例/变量,建议扩展 Application
类并在 AndroidManifest.xml 中将其定义为默认一个。由于应用程序的上下文仅在启动该应用程序时创建(直到应用程序运行并保留在内存中),因此您可以在该类中定义一些变量,以使它们在应用程序的任何位置都可用。代码使用公共方法。
此外,您也可以将您的应用程序类用作 Singleton ,因为它保证在启动时只创建一次。
答案 1 :(得分:2)
使用Singleton类以及扩展Application
类的问题在于,如果应用程序进程被终止 - 当应用程序在后台留下太长时很可能发生 - 该对象将丢失所有数据。
但是,如果您的应用处于前台或在后台停留不多(尽管不是100%无风险),使用Application
类可能是一个不错的选择。
作为替代方案,您可以将数据保存到SharedPreferences
,或者如果您的对象更复杂,请将其保存在database
。
另一种选择是将Application
和SharedPreferences
的使用结合起来。首先尝试从Application
实例检索变量,如果变量为null,则从SharedPreferences
检索它。