очистить стек и закончить

Например,

У меня есть деятельность A, B, C, D

Звонок Б

Intent intent = new Intent(A,B.class);

startActivity(intent);

Затем B звонит C

Intent intent = new Intent(B,C.class);

startActivity(intent);

После этого C вызывает D

Intent intent = new Intent(C,D.class);

startActivity(intent);

В действии D я вызываю finish(). Он вернется обратно к Activity C.

Мой вопрос в том, как я могу очистить Activity A, B, C перед вызовом finish(), чтобы приложение закрылось как обычно.

Не предлагайте вызывать finish() каждый раз startactivity, потому что приложение может вернуться к предыдущему действию, чтобы продолжить.


person Alan Lai    schedule 05.09.2013    source источник
comment
Вы имеете в виду, что хотите очистить весь стек действий перед вызовом какого-либо действия?   -  person Biraj Zalavadia    schedule 05.09.2013
comment
проверьте мой ответ там stackoverflow.com/questions/18570838/   -  person Lia Pronina    schedule 05.09.2013
comment
@BirajZalavadia теперь в стеке есть действия A, B, C и D, и теперь я вызываю finish() в действии D, и приложение должно выйти, а не вернуться к действию C.   -  person Alan Lai    schedule 06.09.2013


Ответы (5)


Это точно должно сработать...

Intent intent = new Intent(D,A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("close",true);
startActivity(intent);

and in oncreat of A activity u have to write
if (getIntent().getBooleanExtra("close", false)) {finish();
}
else {
{
 //ur previous code here
}

Получайте удовольствие, если есть какие-либо проблемы, которые вы можете задать

person DPM    schedule 05.09.2013
comment
теперь в стеке есть действия A, B, C и D, и теперь я вызываю finish() в действии D, и приложение должно выйти, а не вернуться к действию C. FLAG_ACTIVITY_CLEAR_TOP здесь бесполезно - person Alan Lai; 06.09.2013
comment
теперь я отредактировал код, как вам нужно - person DPM; 06.09.2013
comment
Я тоже использую этот трюк. - person Alan Lai; 09.09.2013
comment
хорошо продолжай в том же духе, наслаждайся... - person DPM; 10.09.2013

FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_NEW_TASK

что гарантирует, что если экземпляр уже запущен и не является верхним, то все, что находится поверх него, будет очищено, и он будет использоваться вместо запуска нового экземпляра (это полезно, когда вы перешли Activity A -> Activity B, а затем вы хотите вернуться к A из B, но дополнительные флаги не должны влиять на ваш случай выше).

person KDeogharkar    schedule 05.09.2013

Попробуйте добавить FLAG_ACTIVITY_NEW_TASK.

Таким образом, ваш код будет:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
person Kaidul    schedule 05.09.2013
comment
теперь в стеке есть действия A, B, C и D, и теперь я вызываю finish() в действии D, и приложение должно выйти, а не вернуться к действию C. FLAG_ACTIVITY_NEW_TASK требуется API 11 - person Alan Lai; 06.09.2013

Я использую следующее в своем приложении. Надеюсь, это поможет.

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear the stacks
intent.putExtra("exitme", true); // tell Activity A to exit right away
startActivity(intent);

и в Упражнении А добавьте следующее:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    if( getIntent().getBooleanExtra("exitme", false)){
        finish();
        return;
    }
}
person Lazy Ninja    schedule 05.09.2013
comment
Это кажется некоторой логикой, но это не идеально - person Alan Lai; 06.09.2013
comment
Это делает работу для меня, хотя! Используя его мои приложения! - person Lazy Ninja; 06.09.2013

попробуй с Intent.FLAG_ACTIVITY_CLEAR_TOP

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

см. здесь http://developer.android.com/reference/android/content/Intent.html

person Sunil Kumar    schedule 05.09.2013
comment
теперь в стеке есть действия A, B, C и D, и теперь я вызываю finish() в действии D, и приложение должно выйти, а не вернуться к действию C. FLAG_ACTIVITY_CLEAR_TOP здесь бесполезно, а FLAG_ACTIVITY_NEW_TASK требуется API 11 - person Alan Lai; 06.09.2013