Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序类变量在android中未初始化_Java_Android_Android Memory - Fatal编程技术网

Java 应用程序类变量在android中未初始化

Java 应用程序类变量在android中未初始化,java,android,android-memory,Java,Android,Android Memory,我创建了一个android应用程序,在其中我使用一个应用程序类来存储和访问全局变量。但是我遇到了一个奇怪的行为,在下面的场景中,我的应用程序类中的所有变量都未初始化 如果我的应用程序闲置了一段时间(比如10分钟左右) 如果我的应用程序进入后台(如果在应用程序上方打开浏览器) 我在SO和web上搜索了很多,没有找到任何合适的答案。AFAIK一旦初始化应用程序类,它将在应用程序的生命周期内可访问。我是不是遗漏了什么 由于我是android开发的新手,我可能在这里做错了什么。有人能给我指一下正确的方向

我创建了一个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()检索所有存储的值。