Как завершить все действия, кроме первой активности?

Я google, но даже если я запустил этот код ниже, он не завершил другие действия.

ButtonClick.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { LoginManager.getInstance().ctrl = false; UserManager.getInstance().loginControl(); OrderManager.getInstance().orderCtrl = false; Intent intent = new Intent(OrderComplete.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); finish(); } }); } 

Solutions Collecting From Web of "Как завершить все действия, кроме первой активности?"

ОБНОВЛЕНИЕ Пожалуйста, обратитесь к другим ответам, я не могу удалить ответ, потому что он отмечен как принятый

Согласно нашей дискуссии в комментариях

Ваш данный код хорош!

Q1. Почему он не заканчивает все мероприятия?

Отв. Я думаю, что All Activities Are Finished Except Activities Thread or AysncTask которых есть Thread or AysncTask работающие в фоновом режиме или еще не законченные!

Q2. Как я могу их закончить?

Отв. Убедитесь, что ваша тема должна быть закончена! Или You can Try Timeout etc !


дополнительный

 Pass String with Your Intent 

Для этого Добавить код

 intent.putExtra("finishingallact", "yes"); 

Внутри первой операции (которая не должна быть завершена)

Попробуйте сделать Object of Remaining Activities чтобы закончить их!

Итак, попробуйте код :

 if(getIntent().getStringExtra("finishingallact")!=null) { if(getIntent().getStringExtra("finishingallact").toLowerCase().equals("yes")) { yourRemainingAct act1=new yourRemainingAct(); act1.finish(); // Try Same For ALl Remaining Activities } } 

Чтобы очистить верхние действия от стека, используйте код ниже

 Intent intents = new Intent(A.this, B.class); intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); 

Он удалит все действия из стека, которые выполняются либо в asynctask, либо нет в приложении.

Он отлично работает, а также хороший подход

Когда вы переходите от одного действия к другому завершению работы ();

Делать это

 public void onClick(View v) { Intent i = new Intent(A.this,B.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i); finish(); // to end the current activity } 

Call finish () после startactivity (…), так что A activity ll удаляется из стека. Когда вы нажимаете кнопку «Назад». В стеке не должно быть активности.

Попробуйте это, он отлично работает со мной

 // clear whole activity stack Intent intent = new Intent("clearStackActivity"); intent.setType("text/plain"); sendBroadcast(intent); // start your new activity Intent intent = new Intent(OrderComplete.this, MainActivity.class); startActivity(intent); 

ОБНОВИТЬ

Жаль, что я забыл дать эти строки. Поместите эту строку в метод onCreate () для всех Деяний или если у вас есть базовая активность, которую вы можете поместить там, то нет необходимости включать все действия.

 private KillReceiver clearActivityStack; clearActivityStack = new KillReceiver(); registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain")); 

ОБНОВИТЬ

Так жаль забыть еще одну вещь, чтобы дать этот класс в вашей Базовой деятельности

 private final class KillReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { finish(); } } 

Просто удалите все действия из стека, кроме первой активности

 youractivity.this.finish(); 

Или вы можете использовать Single Single. Для этого вы можете использовать:

 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Мы можем использовать :

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i); 

Удалить android: lanchMode = "singleTop" из манифеста и использовать setFlag intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

1.Если у нас нет класса или потока асинтексов в нашем классе, то просто

 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 

Напишите этот код, вы можете легко удалить все действия из стека

2.Это также можно сделать, делая активность запуска как единую задачу, это может быть сделано путем изменения файла манифеста. в виде

 android:launchMode="singleTask" 

3. Но если у нас есть асинтеза в нашем приложении, а также использование потока, то оба вышеописанных метода не работают.

Для этого нам нужно закончить деятельность один за другим

Например. У нас есть четыре действия A, B, C, D, и каждый класс имеет асинхронную задачу

И мы должны перейти от A -> B-> C-> D

И от D. Мы снова вернулись к «А» и после нажатия кнопки кнопки приложение должно быть закончено или может сказать «выход» *

Для этого мы должны создать статический объект деятельности всех классов. подобно

  **In class A** public static Avtivity mactivity; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); mactivity=this; } 

Сделайте это во всех классах B, C

И затем в D

Нажав кнопку, закончить объекты всех классов.

** mButton.setOnClickListener (новый OnClickListener () {

  @Override public void onClick(View v) { B mB=new B(); mB.mactivity.finish(); //////do this for all class which are present in stack of activities finish(); ////this will finish the D class and we reach at A class } });** 

Thats решить …

Я знаю, что это не гуд, но и не плохой … И главное, это его работа 🙂

Чтобы удалить все действия при открытии нового, сделайте следующее

  Intent intent = new Intent(getApplicationContext(), NewAcivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);