Java 应用程序类变量在android中未初始化
我创建了一个android应用程序,在其中我使用一个应用程序类来存储和访问全局变量。但是我遇到了一个奇怪的行为,在下面的场景中,我的应用程序类中的所有变量都未初始化Java 应用程序类变量在android中未初始化,java,android,android-memory,Java,Android,Android Memory,我创建了一个android应用程序,在其中我使用一个应用程序类来存储和访问全局变量。但是我遇到了一个奇怪的行为,在下面的场景中,我的应用程序类中的所有变量都未初始化 如果我的应用程序闲置了一段时间(比如10分钟左右) 如果我的应用程序进入后台(如果在应用程序上方打开浏览器) 我在SO和web上搜索了很多,没有找到任何合适的答案。AFAIK一旦初始化应用程序类,它将在应用程序的生命周期内可访问。我是不是遗漏了什么 由于我是android开发的新手,我可能在这里做错了什么。有人能给我指一下正确的方向
public class MyApp extends Application {
private MyClass classObj = new MyClass();
private boolean flagOne = true;
private boolean flagTwo = false;
void setFlagOne(boolean flag) {
flagOne = flag;
}
boolean getFlagOne() {
return flagOne;
}
void setFlagTwo(boolean flag) {
flagTwo = flag;
}
boolean getFlagTwo() {
return flagTwo;
}
void setMyClassObj(MyClass obj) {
classObj = obj;
}
boolean getMyClassObj() {
return classObj;
}
}
最后,通过使用共享首选项保存变量状态并将对象存储在applicationfiles目录中,我将其整理出来。因此,如果应用程序在任何时候重新创建(有时如果应用程序在后台运行),我将恢复变量的状态并读回对象。因此,变量在某个时间点不会未初始化 存储值
SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("flagone", flagOne);
editor.putBoolean("flagtwo", flagTwo);
SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
flagOne = pref.getBoolean("flagone", true);
flagTwo = pref.getBoolean("flagtwo", false);
检索值
SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("flagone", flagOne);
editor.putBoolean("flagtwo", flagTwo);
SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
flagOne = pref.getBoolean("flagone", true);
flagTwo = pref.getBoolean("flagtwo", false);
AFAIK一旦初始化应用程序类,它将在应用程序的生命周期内可访问。这对于静态成员是正确的。顺便问一下,你所说的应用程序类是什么意思?我的意思是我正在使用一个扩展应用程序类的类。@blackbelt那么我如何解决这个问题?你可以重写应用程序的,并在调用时记录,以查看应用程序是否正在重新创建。如果
onCreate
被多次调用,然后,每次调用它都意味着应用程序已重新创建,并且您的VAR将初始化为其默认值。您可能需要将它们持久化以保存其状态。您尝试的是获取全局变量的智能方法。虽然此解决方案可以解决我的问题,但这不是智能方法。顺便说一句,应用程序类中的onCreate()回调在哪里。我知道的不多,但可能是helpfull@ShakeebAyaz我的应用程序类已经有了onCreate()回调,很抱歉在回答中没有提到这一点。事实上,我正在从应用程序类中的onCreate()检索所有存储的值。