在Android中使用静态variables

在android中,使用静态variables的build议做法? 例如,在Java中实现一个Singleton模式,我通常会这样做:

private static A the_instance; public static A getInstance() { if (the_instance == null) { the_instance = new A(); } return the_instance; } 

另外,什么时候通过Android JVM清理?

谢谢。

static字段作为一个整体附加到Class实例上,而该实例依次附​​加到加载该类的ClassLoader 。 当整个ClassLoader被回收时, the_instance将被卸载。 我90%确定这发生在Android破坏应用程序(而不是当它进入后台,或暂停,但完全closures)。

所以,只要你的应用程序运行,就认为它是活着的。 辛格尔顿是个好主意吗? 人们有不同的看法。 我认为,如果使用得当,我自己也没问题。 我不认为Android的答案变化很大。 内存使用本身不是问题; 如果你需要在内存中加载一堆东西,那么不pipe你是否将数据封装在一个Singleton中,这都是一个问题,或者不是。

我认为静态variables是确定的。

这是Android文档所说的:

http://developer.android.com/guide/appendix/faq/framework.html

如何在单个应用程序中的活动/服务之间传递数据?

公共静态字段/方法

使活动/服务可访问数据的另一种方法是使用公共静态字段和/或方法。 您可以从应用程序中的任何其他类访问这些静态字段。 要共享一个对象,创build对象的活动设置一个静态字段来指向这个对象,任何其他想要使用这个对象的活动都只是访问这个静态字段。

我不确定这种方法是否适用于您可用的内存有限的移动平台。 更不用说应用程序将在启用多任务的设备上运行。

我认为,这种方法可能会从设备占用内存,但我没有文档来支持这一点。 也许比我更受教育的人可以分享他们的想法。

不,不要这样做! 辛格尔顿是一个反模特儿! 。 相反,使用dependency injection,无论是通过框架(如通过Dagger或Roboguice ),或通过显式传递实例化的对象。