Проблема с активностью, вызванной с помощью Intent.FLAG_ACTIVITY_CLEAR_TOP - PullRequest
0 голосов
/ 16 июня 2011

Я хочу завершить свое приложение, вызвав первое действие с Intent.FLAG_ACTIVITY_CLEAR_TOP и завершив его.Однако по завершении приложение автоматически перезапускается и сразу переходит к действию 2.

Почему?Не должен ли стек активности быть пустым после завершения действия, вызванного с помощью Intent.FLAG_ACTIVITY_CLEAR_TOP?

Мой стек - это Activity2> (больше действий)> Activity1.

In Activity2

Intent exit_intent=new Intent(context, Activity1.class);
exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
exit_intent.putExtra("EXIT", true);
context.startActivity(exit_intent);

В Деятельности1

if (getIntent().getBooleanExtra("EXIT", false)) {           
    finish();
}

Ответы [ 5 ]

6 голосов
/ 16 июня 2011

Из Javadoc:

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

CLEAR_TOP уничтожит все действия ВЫШЕ Activity1: если Activity2 ниже Activity1, то после завершения Activity1 вы увидите Activity2.

1 голос
/ 16 июня 2011

Вы уверены, что finish() правильно вызывается в Activity1? Я чувствую, что это не так, потому что:

  1. Я не уверен, куда это утверждение if входит в вашу активность. Должно быть в onNewIntent.
  2. Если вы делаете этот оператор if в методе onNewIntent, это все еще неправильно. документы указывают, что getIntent() всегда будет возвращать исходное намерение, с которого началось действие, если только вы не вызовете setIntent().

В заключение, возможно, что-то еще вызывается в вашей Деятельности1 (не может сказать без полного кода), который запускает Активность2 вместо завершения.

Если то, что я описал, не соответствует действительности, и ваш стек активности действительно выглядит как Activity2> Activity1, как другие описали yes, он не будет работать. Просто позвоните finish() в Activity2?

0 голосов
/ 17 августа 2011

From Intent doc:

public static final int FLAG_ACTIVITY_CLEAR_TOP 

Если он объявил свой режим запуска «множественным» (по умолчанию) и вы не установили FLAG_ACTIVITY_SINGLE_TOP в том же самом намерении, тогда он будет завершени воссоздан.

0 голосов
/ 16 июня 2011

Вы правильно поняли, но поймете ли вы намерение внутри метода onNewIntent вашей первой деятельности? для того, чтобы это сработало, также следует запустить мероприятие 2 после мероприятия 1.

0 голосов
/ 16 июня 2011

Согласно документам :

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

Таким образом, он не очищает весь стек действий, а только любые другие действия, которые были поверх старого экземпляра запускаемого действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...