Намерение Android.FLAG_ACTIVITY_SINGLE_TOP И намерение.FLAG_ACTIVITY_CLEAR_TOP

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

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

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

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

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


person shaneburgess    schedule 10.07.2010    source источник
comment
Вы пошли на это? Вы обнаружили какие-то подводные камни?   -  person Thomas Ahle    schedule 22.09.2011
comment
Наличие Intent.FLAG_ACTIVITY_SINGLE_TOP в основном действии опасно. Это может привести к некоторым ограничениям по времени.   -  person Maher Abuthraa    schedule 19.06.2019


Ответы (2)


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

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

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

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

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

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

person Shubhamhackz    schedule 27.08.2018
comment
Хорошее объяснение. - person Chirag Savsani; 02.10.2018
comment
Хороший Шубхам - person Deepboy; 28.03.2019

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

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

person Thinkisto    schedule 15.10.2010