扩展应用程序类和良好实践

Teo*_*ald 5 singleton android

我最近被告知扩展应用程序类以便将其用作Singleton是一种不好的做法,但没有任何解释.
那么使用这个类背后的潜在问题是什么?我已经看到它在许多项目中使用过.

另外,如果使用Application Class是个坏主意,那么存储应用程序级变量的替代方法是什么?

waq*_*lam 7

使用Singleton方法并不是一个坏主意,但在多线程环境中使用时可能会很麻烦,其中一个线程将值设置为变量而另一个线程可能在没有任何通知的情况下覆盖该值.

但是,为了保留应用程序级实例/变量,建议扩展 Application类并在AndroidManifest.xml中将其定义为默认类.由于应用程序的上下文在启动该应用程序时创建一次(直到应用程序运行并保留在内存中),因此您可以在该类中定义一些变量,以便使用公共方法在应用程序的代码中的任何位置使用它们.

此外,您也可以将您的应用程序类用作Singleton,因为它保证在启动时只创建一次.


And*_*Res 2

使用 Singleton 类以及扩展该类的问题Application是,如果应用程序进程被终止(当应用程序在后台停留太长时间时很可能会发生这种情况),则对象将丢失所有数据。

然而,Application当您的应用程序位于前台或不在后台停留太多时间时,使用类可能是一个不错的选择(尽管不是 100% 无风险)。

作为替代方案,您可以将数据保存到SharedPreferences,或者如果您的对象更复杂,则将其保存到database.

另一种选择是结合使用Application, plusSharedPreferences例如。首先尝试从实例中检索变量Application,如果变量为 null,则从 中检索它SharedPreferences