清理堆栈并退出应用程序onBackPressed()

时间:2012-05-03 09:03:02

标签: android stack

基本上我的应用程序有一个loginScreen,一旦登录你就可以进行很多活动。当我按下主页按钮时,应用程序进入后台,如果用户在一定时间内没有打开它,则会关闭用户会话并返回loginScreen。现在的问题是,如果我想在会话过期后从loginScreen关闭应用程序,请按后退键,它应该关闭,但它不会。它将我带到堆栈中的前一个元素。

有线的东西是所有的onBackPressed()方法,当我开始新的意图时,我总是使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 并在loginScreen onBackPressed()上调用finish() 但它不起作用。谁知道为什么?以及如何解决这个问题。

感谢您的帮助!!!

代码段 在很多活动中:

@Override
    public void onBackPressed() {
        mpButtonClick.start();
        Intent intent = new Intent(this, MenuPagina.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(intent); 
        super.onBackPressed(); 
    }
登录活动中的

@Override
    public void onBackPressed() {
        super.onBackPressed();
        getIntent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        LoginActivity.this.finish();
    }

3 个答案:

答案 0 :(得分:4)

你可以这两种方式:

  1. 在背面按android.os.Process.killProcess(android.os.Process.myPid());杀死应用。
  2. 为此,您需要在清单上添加以下权限。

    <uses-permission
            android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    

    2。使用静态布尔'isKill'变量,默认为false,每次在登录活动oncreate()方法中设置为false。

    在登录活动onBackPress()方法中设置isKill值为true。

    然后在每个活动onResume()方法

    中写下面的代码
    if(isKill)
    {
        finish();
    }
    

答案 1 :(得分:0)

当我开始一项我不想被包含在BackStack中的活动时,我使用:

myintent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

我已经读过(在这里某处)onBackPressed()没有调用,而是使用了onKeyPressed并指定了后退按钮。我会看看能否找到这个例子。

以下是示例: Android - onBackPressed() not working

答案 2 :(得分:0)

@Override
public void onBackPressed() {

   AlertDialog.Builder builder = new AlertDialog.Builder(this);
   builder.setTitle("Exit");
   builder.setMessage("Do you want to exit? ");
   builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

 // do something when the button is pressed
       public void onClick(DialogInterface arg0, int arg1) {

           finish();
       **YourActivityName**.super.finishAffinity();
    }
 })
 .setNegativeButton("No", new DialogInterface.OnClickListener() {

// do something when the button is pressed
        public void onClick(DialogInterface arg0, int arg1) {
         }
  }).show();


}