gpt4 book ai didi

android - 静态类变量的生命周期

转载 作者:行者123 更新时间:2023-11-29 22:09:46 24 4
gpt4 key购买 nike

public class Checker {
static private int value1 = 0, value2 = 1;

static private Activity activity;

public static void init(Activity activity) {
Checker.activity = activity;

value1 = // calculate value

value2 = // calculate value, normally the same as value1
}

public static void check() {
if (value1 != value2)
activity.finish();
}
}

我得到了上面的类,并在主要 Activity 的 onCreate 中调用了 Checker.init(),并在我的代码的不同点调用了 Checker.check()。问题是,在后台运行一段时间后重新打开应用程序时,我在 Checker.check() 中为 activity.finish() 收到 NullPointerException。

通常 value1 == value2,所以这个异常似乎表明所有静态变量都被重置为默认值。我是 Java/Android 新手,但我认为只要 Activity 在内存中,这些变量就会保留,以防 Activity 在创建时被杀死,因此 Checker.init() 再次调用。那为什么会这样呢?

最佳答案

根据您描述的症状,最有可能发生的情况是 Checker 的 ClassLoader 正在收集垃圾,但您的 Activity 没有被垃圾收集。因此,当应用程序从后台返回时,Activity 会转到 onResume。当调用 Checker.check() 时,Checker 类会重新加载默认值 value1value2.

确保 Checker 类在 Activity 期间一直存在的一种方法是在 Activity 类中保留对 Checker 实例的引用。当然,您也可以考虑重新设计 Checker 功能,使其不依赖于静态成员行为。

关于android - 静态类变量的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9929654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com