5

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

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

4

2 回答 2

7

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

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

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

于 2012-09-08T21:33:57.030 回答
2

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

但是,Application如果您的应用程序处于前台或后台不多(尽管不是 100% 无风险),使用类可能是一个不错的选择。

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

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

于 2012-09-08T21:33:20.530 回答