Как завершить все действия, кроме первой активности?
Я 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
}
});**
Это решение...
Я знаю, что это не гуд, но и не плохой... И главное, это его работа:)