Подтвердить что ты не робот

Android: выход из приложения при нажатии кнопки возврата

В моем приложении я хочу выйти из приложения, когда нажимаю кнопку "Назад", этот мой код:

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }).setNegativeButton("No", null).show();
    }

он работает правильно, но когда я выхожу из приложения, он не выходит полностью и показывает пустую страницу с моим логотипом приложения, и когда я снова нажимаю кнопку выхода из приложения, как я могу ее исправить???

EDIT:

Я использую этот код вместо выше, но мое приложение полностью выходит, но я хочу, чтобы он работал на фоне и не полностью вышел, как я могу это сделать?

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                    }
                }).setNegativeButton("no", null).show();
    } 
4b9b3361

Ответ 1

Когда вы нажмете назад, а затем вы закончите свою текущую деятельность (скажите A), вы увидите пустое действие с логотипом вашего приложения (скажем B), это просто означает, что активность B, которая отображается после окончания A, все еще находится в задней части, а также активность A была начата с активности B, поэтому в активности вы должны начать активность A с флагами как

Intent launchNextActivity;
launchNextActivity = new Intent(B.class, A.class);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);                  
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(launchNextActivity);

Теперь ваша активность A находится сверху в стеке, при этом никакие другие действия вашего приложения не будут выполняться на задней панели.

Теперь в действии A, где вы хотите реализовать onBackPressed, чтобы закрыть приложение, вы можете сделать что-то вроде этого,

private Boolean exit = false;
@Override
    public void onBackPressed() {
        if (exit) {
            finish(); // finish activity
        } else {
            Toast.makeText(this, "Press Back again to Exit.",
                    Toast.LENGTH_SHORT).show();
            exit = true;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    exit = false;
                }
            }, 3 * 1000);

        }

    }

Обработчик здесь обрабатывает случайные обратные нажатия, он просто показывает Toast, и если в течение 3 секунд имеется другое обратное нажатие, оно закрывает приложение.

Ответ 2

Попробуйте следующее:

Intent intent = new Intent(Intent.ACTION_MAIN);
          intent.addCategory(Intent.CATEGORY_HOME);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
          startActivity(intent);
          finish();
          System.exit(0);

Ответ 3

У меня была одна и та же проблема: у меня есть одна LoginActivity и одна MainActivity. Если я нажму кнопку "Назад" в MainActivity, приложение должно закрыть. Я сделал это с помощью метода OnBackPressed. этот moveTaskToBack() работает так же, как и кнопка "Главная". Он оставляет стек Back, как есть.

public void onBackPressed() {
  //  super.onBackPressed();
    moveTaskToBack(true);

}

Ответ 4

Это означает, что вы выполняли предыдущую операцию в стеке при запуске этой операции. Добавить finish(); после строки, в которой вы вызываете это действие.

В вашей предыдущей деятельности. когда вы начинаете новую деятельность, например -

startActivity(I);

Добавьте finish(); после этого.

Ответ 5

В моем понимании Google хочет, чтобы Android справлялся с управлением памятью и закрывал приложения. Если вы должны выйти из приложения из кода, может быть полезно попросить Android запустить сборщик мусора.

@Override
public void onBackPressed(){
    System.gc();
    System.exit(0);
}

Вы также можете добавить finish() в код, но это, вероятно, избыточно, если вы также используете System.exit(0)

Ответ 6

Finish не закрывает приложение, он просто закрывает активность. Если это активность запуска, она закроет ваше приложение; если нет, он вернется к предыдущему действию.

Что вы можете сделать, это использовать onActivityResult, чтобы вызвать как можно больше финиша(), чтобы закрыть все открытые действия.

Ответ 7

Эта работа для меня. Я нашел ее сам, объединив другие ответы

private Boolean exit = false;
@override
public void onBackPressed(){ 
    if (exit) {
        finish(); // finish activity
    } 
    else {
        Toast.makeText(this, "Press Back again to Exit.",
            Toast.LENGTH_SHORT).show();
         exit = true;
         new Handler().postDelayed(new Runnable() {

         @Override
         public void run() {
             // TODO Auto-generated method stub
             Intent a = new Intent(Intent.ACTION_MAIN);
             a.addCategory(Intent.CATEGORY_HOME);
             a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(a);
        }
    }, 1000);
}

Ответ 8

Кажется, никто не рекомендовал noHistory = "true" в manifest.xml, чтобы предотвратить появление определенной активности после нажатия кнопки возврата, которая по умолчанию вызывает метод finish()

Ответ 9

Вместо finish() вызов super.onBackPressed()

Ответ 10

Используйте этот код очень простое решение

 @Override
    public void onBackPressed() {
      super.onBackPressed(); // this line close the  app on backpress
 }