在 Android 中使用单例模式如何影响内存使用?

How does using singleton patterns in Android impact memory usage?

我正在考虑在我正在构建的 Android 应用程序中为适配器和助手使用单例模式,但我不太熟悉 Java 的垃圾收集以及如何收集静态属性(例如 static FooBar instance)影响内存使用。

它是否会对 Android 应用程序产生足够大的影响,我应该避免使用它?

取决于您所说的 "impact memory usage" 是什么意思。一个对象不会仅仅因为它的一个实例由单例模式强制执行而变大或变小。从这个意义上说,没有区别。

如果这意味着您肯定在内存中最多有一个对象的副本而不是多个,是的,它可能会有所帮助。

通常人们的意思是,单身人士能活多久?当应用程序在后台时它会一直占用内存吗?

一个 static 成员附加到其 Class 的实例,后者又附加到其 ClassLoader。所以单身人士的寿命与 ClassLoader 一样长。事实证明,在 Android 中应用程序的 ClassLoaderonDestroy 中消失,而不是 onPause,因此单例意味着即使应用程序在背景.

正如其他人所说,这取决于。可能不好的情况是,如果单例持有对可能被垃圾收集的对象的引用。如果对象中有很多引用,或者对大对象的引用,您可能正在使用不需要的内存。您可以通过使用弱引用来解决它,但是如果对象被垃圾收集,您必须有代码在需要时重新创建对象。你不能使用单例模式,它允许事物被垃圾收集(至少可能),但以创建和丢弃对象为代价。最佳解决方案取决于对象的详细信息及其用法。要始终避免的一件事是持有对 UI 对象的引用,例如视图。