Android: очистите все действия backstack, а затем завершите текущую деятельность


У меня есть различные действия в моем приложении, и поток очень сложен. Что я хочу сделать, так это, как только usb-устройство будет подключено, я хочу очистить и завершить работу с обратным стеком, а затем завершить текущую деятельность и систему.выход (0) для закрытия приложения.

Я уже реализовал прослушиватель usb-устройств. Я хочу знать, как очистить и завершить операции обратного стека(если таковые имеются, то они не будут выполняться каждый раз), а затем завершить текущий стек. один.

Также, если мое действие A находится сверху,и у него есть 2 действия (B, C) в заднем стеке. Теперь, если activity a работает в фоновом режиме и подключен usb, только Activity A будет слушать его правильно? (У меня есть USB-приемник, реализованный в каждом действии.)

Как добиться этого без сбоя приложения?

Спасибо

2 6

2 ответа:

Есть finishAffinity() Метод, который завершит текущую деятельность и все родительские действия, но он работает только в Android 4.1 или выше

Источник

finishAffinity() завершит это действие, а также все действия непосредственно под ним в текущей задаче, которые имеют одинаковое сродство

Если вы хотите для всех уровней API
в одном из ваших занятий

Intent intent = new Intent(this, YourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack
intent.putExtra("Exit me", true);
startActivity(intent);
finish();

Затем в методе youractivity onCreate () добавьте это для завершения деятельность

setContentView(R.layout.your_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
   finish();
   return; // add this to prevent from doing unnecessary stuffs
}

В приложении, которое я сделал, я поставил:

if(Globals.isExit){
  finish();
}

В каждом методе onResume() в каждом действии.

Globals-это класс, который объявлен как an в манифесте.XML. Глобальный класс имеет логическое значение exit.

В меню опции все действия включите опцию выхода, которая устанавливает глобалы.выход в true, и вызывает finish ()

Тогда все действия, оставшиеся незавершенными, будут завершены.

Не уверен, Нужно ли использовать намерение, чтобы очистить backstack, или если завершение очищает его для вас. Извините, если я ошибаюсь в этом кусочке.

Извините за плохой набор текста, я разговариваю по телефону.