Вопрос по android – очистить стек и выйти из приложения onBackPressed ()

1

в основном мое приложение имеет экран входа в систему и после входа в систему вы можете выполнять множество действий. Когда я нажимаю кнопку «Домой», приложение переходит в фоновый режим, и если пользователь не открывает его в течение определенного времени, сеанс пользователя закрывается, и вы возвращаетесь на экран входа в систему. Теперь проблема в том, что если я хочу закрыть приложение с экрана входа в систему после истечения срока моей сессии, я нажимаю клавишу возврата, и она должна закрыться, но это не так. это подводит меня к предыдущему элементу в стеке.

дело в том, что во всех методах onBackPressed () и когда я начинаю новые намерения, я всегда используюintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); и на экране входа в систему наBackPressed () я вызываю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(); 
    }

в loginActivity:

@Override
    public void onBackPressed() {
        super.onBackPressed();
        getIntent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        LoginActivity.this.finish();
    }
Это может быть совершенно неправильно и идиотично с моей стороны, но имеет ли значение, что super.onBackPressed (); происходит, прежде чем вы очистите намерение / закончить? Tony
отредактировал его с некоторым кодом Pheonix7
Нет, как сказано в javadoc & quot; Реализация по умолчанию просто завершает текущую активность & quot; Pheonix7
Разместите свой код, пожалуйста. Changwei Yao

Ваш Ответ

3   ответа
0

которое я не хочу включать в BackStack, я использую:

myintent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

Я читал (где-то здесь) о том, что onBackPressed () не вызывается, и вместо этого они использовали onKeyPressed и указали кнопку возврата. Я посмотрю, смогу ли я найти пример.

Вот пример: Android - onBackPressed () не работает

Моя ошибка, извините
но я хочу, чтобы в моем стеке были активисты. я хочу иметь возможность вернуться к предыдущим действиям. я просто хочу очистить стек, когда сессия истекает и я на loginActivity я должен нажать обратно, и приложение должно закрыться Pheonix7
4

kill app by using android.os.Process.killProcess(android.os.Process.myPid()); on back press.

Для этого вам необходимо добавить ниже разрешение на манифест.

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

2 использовать статический логический «isKill» переменная со значением по умолчанию false и каждый раз, когда в методе входа в систему активируется метод oncreate ().

установите значение isKill true в методе входа в систему по методу onBackPress ().

А затем напишите ниже код в каждом методе onResume () деятельности

if(isKill)
{
    finish();
}
Первый метод является жестоким и быстрым в использовании. Я пробовал это, но, к сожалению, это не работает .... Я попробую второй способ, и я дам вам знать. Pheonix7
Я использую второй, так что надеюсь, это поможет вам. Пожалуйста, примите ответ, если это полезно для вас. Таким образом, другой пользователь воспользуется этим.
Я использовал ваш второй метод в нескольких действиях, и, похоже, он работает. хотя я поместил переменную isKill в приложение, чтобы она была глобальной переменной и все действия могли использовать ее. я буду продолжать его тестирование и дам вам знать ... Pheonix7
да, это работает ... Pheonix7
Я забыл упомянуть, что первый метод завершает работу приложения только в том случае, если в стеке только одно действие, поэтому второй метод лучше для вас. Я также использую второй в моем проекте.
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();


}
У меня это сработало :)
YourActivityName.super.finishAffinity (); например, MyFirstActivity.super.finishAffinity ().

Похожие вопросы