Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用单例模式如何影响内存使用?_Android_Singleton - Fatal编程技术网

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

在Android中使用单例模式如何影响内存使用?,android,singleton,Android,Singleton,我正在考虑在我正在构建的Android应用程序中为适配器和助手使用单例模式,但我不太熟悉Java的垃圾收集以及静态属性(如静态FooBar实例)如何影响内存使用 它对Android应用程序的影响是否足够大,以至于我应该避免使用它?取决于你所说的影响内存使用的意思。一个对象并不是因为它有一个由单例模式强制执行的实例而变大或变小。从这个意义上说,没有区别 如果这意味着您的内存中肯定最多有一个对象的副本,而不是几个,那么这可能会有所帮助 通常人们的意思是,单身汉能活多久?当应用程序在后台时,它是否会占

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


它对Android应用程序的影响是否足够大,以至于我应该避免使用它?

取决于你所说的影响内存使用的意思。一个对象并不是因为它有一个由单例模式强制执行的实例而变大或变小。从这个意义上说,没有区别

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

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


静态成员被附加到其类的实例,该实例又被附加到其类加载器。所以单身汉的寿命和类加载器一样长。在安卓系统中,应用程序的类加载器在onDestroy中消失,而不是在Pause中消失,因此单例意味着即使应用程序在后台,也会保留内存。

取决于你所说的影响内存使用的意思。一个对象并不是因为它有一个由单例模式强制执行的实例而变大或变小。从这个意义上说,没有区别

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

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


静态成员被附加到其类的实例,该实例又被附加到其类加载器。所以单身汉的寿命和类加载器一样长。在安卓系统中,应用程序的类加载器在onDestroy中消失,而不是在Pause中消失,因此单例意味着即使应用程序在后台,你也会保留内存。

正如其他人所说,这取决于你。情况可能不好的是,如果单例对象持有对可能被垃圾收集的对象的引用。如果对象中有很多引用,或对大型对象的引用,则可能使用了不需要的内存。您可以通过使用弱引用来解决这个问题,但是如果对象被垃圾收集,那么您必须有代码在需要时重新创建这些对象。您不能使用singleton模式,这将允许至少潜在地收集垃圾,但以创建和丢弃对象为代价。最佳解决方案取决于对象的详细信息及其用法。要经常避免的一件事是保留对UI对象的引用,例如视图。

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

这取决于您的代码。如果可能有多个实例执行相同的操作,那么单个实例将使用更少的内存,因为它不存储同一对象的多个实例。有一个神话,是因为人们不了解活动生命周期而发明的,Android不知何故决定释放变量。事实并非如此。它的垃圾收集器和其他垃圾收集器一样。如果您有一个或多个对象引用,则不会收集该对象。这取决于您的代码。如果可能有多个实例执行相同的操作,那么单个实例将使用更少的内存,因为它不存储同一对象的多个实例。有一个神话,是因为人们不了解活动生命周期而发明的,Android不知何故决定释放变量。事实并非如此。它的垃圾收集器和其他垃圾收集器一样。如果有一个或多个对象引用,则不会收集该对象。