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

Я 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();
        }
    });
}

Ответ 1

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

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

Ваш данный код в порядке!

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

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

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

Ans. Убедитесь, что ваш поток должен быть завершен! или 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 
  }
}

Ответ 2

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

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(intents);
finish();

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

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

Ответ 3

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

сделайте это

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 удаляется из стека. когда вы нажимаете кнопку "Назад". В стеке не должно быть активности.

Ответ 4

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

// 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);

UPDATE

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

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

UPDATE

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

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

Ответ 5

просто удалите все действия из стека, кроме вашего первого действия.

youractivity.this.finish();

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

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

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

android:launchMode="singleTask" 

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

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

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

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

и из D Мы снова вернемся к * "A" и после нажатия кнопки на устройстве приложение должно быть закончено или может сказать exit *

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

 **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
                    }
                  });**

Это решение...

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