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()中得到了一個NullPointerException異常,因爲activity.finish()在一段時間後重新打開應用程序時重新打開它。靜態類變量的生存期
通常value1 == value2,所以這個異常似乎表明所有的靜態變量都被重置爲默認值。我是一個Java/Android新手,但我認爲只要活動在內存中,並且在onCreate中終止活動並再次調用Checker.init(),就會保留這些變量。那麼爲什麼會發生?
爲什麼不改變'check'的簽名來傳入'Activity',即'public static void check(Activity activity)'?想必你在你想完成的活動中調用「check」。 – 2012-03-29 16:45:54
因爲這並不能解決問題。通常這行不應該執行,因爲value1 == value2。它只會由於靜態變量的明顯重置而被執行,因此value1!= value2。 – Ezekeel 2012-03-29 16:54:37