Android 即使应用程序关闭,全局变量仍然存在

Android 即使应用程序关闭,全局变量仍然存在,android,android-activity,global-variables,Android,Android Activity,Global Variables,我声明了一个类扩展应用程序,以在我的应用程序的活动之间保留一个全局变量。当我从启动程序activity(FirstActivity.Java)按back键时,我的应用程序关闭,但变量的值仍然保持不变,这是我不想要的。如何实现 请注意-FirstActivity扩展了BaseActivity 我创建这个完整的设置是为了显示一个pin活动,每当应用程序启动或从后台进入前台时,它都会请求pin。因此,我在onStop()中将setup标志设置为false,这样当它在onStart()中检查标志时,pi

我声明了一个类扩展应用程序,以在我的应用程序的活动之间保留一个全局变量。当我从启动程序activity(FirstActivity.Java)按back键时,我的应用程序关闭,但变量的值仍然保持不变,这是我不想要的。如何实现

请注意-FirstActivity扩展了BaseActivity

我创建这个完整的设置是为了显示一个pin活动,每当应用程序启动或从后台进入前台时,它都会请求pin。因此,我在
onStop()
中将setup标志设置为false,这样当它在
onStart()中检查标志时,pin就会显示出来

我没有跟随-

BaseActivity.Java

public class BaseActivity extends Activity {
    //static boolean flag = true;
    Context con;
    private ApplicationActivity app;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this.savedInstanceState = savedInstanceState;
        app = (ApplicationActivity)getApplication();
        Log.d("pin", "on Create base");
        con = this;
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.d("pin", "on start 1");
        if(app.isFlag()){
            //Start pin activity here - if pin is true it sets flag to false  
        app.setFlag(false);
        }

    }
public class ApplicationActivity extends Application{
    private boolean flag = true;

    public boolean isFlag() {
        //SharedPreferences sp = new SharedPreferences();
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
public class MainActivity extends BaseActivity {
//private Bundle savedInstanceState;
    Context con;
    Button nextActivity;
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        //this.savedInstanceState = savedInstanceState;
        Log.d("pin", "on Create 1");
        con = this;
    }
}
applicationActivity.java

public class BaseActivity extends Activity {
    //static boolean flag = true;
    Context con;
    private ApplicationActivity app;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this.savedInstanceState = savedInstanceState;
        app = (ApplicationActivity)getApplication();
        Log.d("pin", "on Create base");
        con = this;
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.d("pin", "on start 1");
        if(app.isFlag()){
            //Start pin activity here - if pin is true it sets flag to false  
        app.setFlag(false);
        }

    }
public class ApplicationActivity extends Application{
    private boolean flag = true;

    public boolean isFlag() {
        //SharedPreferences sp = new SharedPreferences();
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
public class MainActivity extends BaseActivity {
//private Bundle savedInstanceState;
    Context con;
    Button nextActivity;
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        //this.savedInstanceState = savedInstanceState;
        Log.d("pin", "on Create 1");
        con = this;
    }
}
FirstActivity.Java

public class BaseActivity extends Activity {
    //static boolean flag = true;
    Context con;
    private ApplicationActivity app;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this.savedInstanceState = savedInstanceState;
        app = (ApplicationActivity)getApplication();
        Log.d("pin", "on Create base");
        con = this;
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.d("pin", "on start 1");
        if(app.isFlag()){
            //Start pin activity here - if pin is true it sets flag to false  
        app.setFlag(false);
        }

    }
public class ApplicationActivity extends Application{
    private boolean flag = true;

    public boolean isFlag() {
        //SharedPreferences sp = new SharedPreferences();
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
public class MainActivity extends BaseActivity {
//private Bundle savedInstanceState;
    Context con;
    Button nextActivity;
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        //this.savedInstanceState = savedInstanceState;
        Log.d("pin", "on Create 1");
        con = this;
    }
}

如何将仍然保持不变的变量设置为null或在您离开应用程序时重置该变量

你可以用这个

@Override
public void onPause() {
    yourVariable = null;
}


另外,我建议您使用
SharedReferences
在整个应用程序中设置全局变量。

是什么让您认为该值会改变?我看不到你的代码中有任何东西可以这样做<代码>当我从我的启动程序活动(FirstActivity.Java)按back键时,我的应用程序关闭
-你是如何做到这一点的?我是说,你是如何“关闭”应用程序的。我想你可能误解了安卓。你们不能“关闭”应用程序,就像你们不能“关闭”网站一样。你们可以在应用程序启动时初始化变量。我做了一些混乱的编辑。现在在
BaseActivity-app.setFlag(false)中检查将进行更改it@PurpleDroid我还没有发布全部代码,但我的逻辑要求我检查onStart()本身中flag的值,这取决于我执行的某些操作。当你从我的启动程序活动中按back键时,你的应用程序仍然受到操作系统的关注。如果您从设置中强制停止此应用,您的变量将按您的需要使用。否则,您可以在启动程序活动中使用onPause()回调来重置此变量。但是,如果用户按Home键是您的任何活动(除:launcher活动外),您仍然会遇到此问题。这是一个checkPin活动,因此我有义务在onStop()中将变量设置为true;在onDestroy()中为假;任何介于两者之间的事情都会改变逻辑。