【问题标题】:Are static variables safe from lifecycle garbage collection?静态变量对生命周期垃圾收集是否安全?
【发布时间】:2015-04-19 13:15:46
【问题描述】:

如果有这样的课程

public static class Globals {
    public static string MyString;

    static Globals() {
        MyString = "example";
    }
}

只要应用程序进程正在运行(可能在后台),MyString 是否总是“示例”?

-- 编辑--

假设 MyString 没有被用户更改。

【问题讨论】:

  • 您所说的“运行”是指在前台显式运行吗?如果没有,我认为没有任何保证。
  • 运行是指应用程序也可以在后台运行。

标签: android


【解决方案1】:

这是一个public,非final 字段,所以不,可能有各种代码会改变它的值。

但是是的,如果您不更改该值,它将保持设置状态。初始化程序块在类本身加载时运行一次,并且该字段不会以某种方式神奇地丢失其值。 (即使类应该被卸载,我不确定这是否会在 Android 上发生,如果类应该再次加载,该字段也会重新初始化)

【讨论】:

    【解决方案2】:

    可以,只要进程存在。小心你保留的引用以避免内存泄漏。见:

    Lifetime of a static variable in AndroidStatic singleton lifetime in Android

    您也可以为此目的扩展 Application 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 2016-02-29
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2011-09-29
      相关资源
      最近更新 更多