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