在Android中使用静态变量

mic*_*ael 56 java android dalvik

在android中,使用静态变量是推荐的做法吗?例如,在Java中实现Singleton模式,我通常会这样做:

private static A the_instance;
public static A getInstance() {
    if (the_instance == null) {
       the_instance = new A();
    }
    return the_instance;
}
Run Code Online (Sandbox Code Playgroud)

此外,Android JVM何时清理它?

谢谢.

Sea*_*wen 63

static字段Class作为一个整体附加到实例,而后者又附加到ClassLoader加载类的实例上.the_instance将在整个ClassLoader回收时卸载.我90%肯定当Android破坏应用程序时会发生这种情况(不是当它进入后台,或暂停,但完全关闭时.)

所以,只要你的应用程序运行,就把它想象成生存.Singleton是个好主意吗?人们有不同的看法.我认为,如果使用得当,我自己也没关系.我认为答案在Android上没有太大变化.内存使用本身不是问题; 如果你需要在内存中加载一堆东西,这或者是一个问题,或者不是,不管你是否将数据封装在Singleton中.

  • 应该注意的是,将重新创建单例,但单例的原始状态不会自动恢复.这必须手动完成. (13认同)
  • 确认后,它将被保留,直到您的整个过程被销毁.当你的过程恢复时,你的单身人士会重新出现! (4认同)
  • @harshjv单身人士通常也被设计为不可变的,在这种情况下,你是否看到旧的或新的副本并不重要.但是如果你的单身人士维持状态,那么当单身人士被摧毁时,这种状态就会丧失.它被重新创建,但具有默认的初始状态. (2认同)

use*_*239 15

我认为静态变量是可以的.

这就是Android doc所说的:

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

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

公共静态字段/方法

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

  • 绑定,回调/监听,但不是静态的 (10认同)
  • 您听说过意图吗?静电场是不好的做法,它趋于紧密耦合... (2认同)
  • 你们能为我提供正确的解决方案吗?对于静态变量,当应用程序来自后台或保持打开状态几个小时时,我会遇到问题,它会崩溃。有意地传递物体是非常困难的。那么执行此操作的正确方法是什么? (2认同)