Android Intent.FLAG_ACTIVITY_SINGLE_TOP AND Intent.FLAG_ACTIVITY_CLEAR_TOP - PullRequest
23 голосов
/ 10 июля 2010

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

Я могу успешно сделать это, добавив следующие флаги в вызов startActivity:

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

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

Есть ли подводные камни в использовании этого метода?

Ответы [ 2 ]

13 голосов
/ 15 октября 2010

Просто чтобы убедиться, что я правильно понимаю ваш вопрос: скажем, ваш стек активности похож на A -> B -> C, и теперь из C вы хотите очистить стек и вернуться к A.

Если это то, что вам нужно, то эти флаги намерения верны и должны работать как положено, в соответствии с документами для Android-разработчика .

8 голосов
/ 27 августа 2018

Я знаю, что этот вопрос довольно старый, и, возможно, вы решили свою проблему и, возможно, в те годы его отправили на Марс и обратно. Но просто чтобы прояснить ситуацию людям, которые приходят сюда и ищут объяснения:

Согласно официальной документации:

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

  • Предположим, у вас есть BackStack A-B-C-D, и вы запустили другое намерение Начиная с Activity A с FLAG_ACTIVITY_CLEAR_TOP, в этот момент Android будет делать это просто Очистить все действия навершина Activity A означает, что теперь ваш BackStack будет выглядеть как -> A (да, все, потому что вы очистили все действия поверх него).
  • И во втором сценарии Предположим, у вас естьто же самое BackStack ABCD и вы запустили Intent Starting Activity A с FLAG_ACTIVITY_SINGLE_TOP, теперь ваш BackStack будет выглядеть как-> ABCDA (В замешательстве? Не беспокойтесь, следующий пример будетОчистите все ваши заблуждения)
  • Третий сценарий. Мы начнем с того же BackStack A-B-C-D и запустим намерение, начинающееся Activity D с FLAG_ACTIVITY_SINGLE_TOP, теперь наш BackStack будет выглядеть как -> A-B-C-D (Да, BackStack остается в том же порядке, потому что наш FLAG запрещает запуск той же активности, если он находится на вершине стека и отображается на экране пользователя.

  • Последний сценарий, Мы начинаем с того же BackStack A-B-C-D и запускаем Intent Starting Activity D, но на этот раз без флагов, теперь наш BackStack будет выглядеть как -> A-B-C-D-D.

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

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