在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 ),或通过显式传递实例化的对象。