Android 扩展应用程序类&;良好做法

Android 扩展应用程序类&;良好做法,android,singleton,Android,Singleton,最近有人告诉我,扩展应用程序类以将其用作单例是一种不好的做法,但没有任何解释。 那么,使用这个类背后的潜在问题是什么?我已经在许多项目中看到了它的应用 另外,如果使用应用程序类是个坏主意,那么存储应用程序级变量的替代方案是什么?使用单例类以及扩展应用程序类的问题,如果应用程序进程被终止——当应用程序在后台停留太长时间时,很可能发生这种情况——对象将丢失所有数据 然而,当你的应用程序在前台或者在后台的时间不长(虽然不是100%无风险)时,使用应用程序类可能是一个不错的选择 或者,您可以将数据保存到

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


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

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

然而,当你的应用程序在前台或者在后台的时间不长(虽然不是100%无风险)时,使用
应用程序
类可能是一个不错的选择

或者,您可以将数据保存到
SharedReferences
,或者如果对象更复杂,则将其保存在
数据库中


另一种选择是结合使用
应用程序
,再加上
共享引用
。首先尝试从
应用程序
实例中检索变量,如果该变量为null,则使用单例方法从
共享引用
中检索该变量其实不是一个坏主意,但是,在多线程环境中使用时,如果一个线程将一个值设置为变量,而另一个线程可能会在没有任何通知的情况下过度写入该值,那么这可能会很麻烦

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


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

谢谢您的回答。我想我会选择混合方法。我不太喜欢在可以避免的情况下从磁盘读取数据。我使用了单例方法,这对我来说非常有效。但是,正如您所说的,在多线程环境中要小心。