Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: shaneburgessОтветов: 2

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

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

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

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

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

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

androidandroid-intent

Ответы

Ответ 1 · рейтинг 18 · Shubhamhackz

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

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

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

  • Предположим, у вас есть 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 полезен только тогда, когда вы запускаете то же самое действие, которое в данный момент отображается на экране, и вы хотите запретить запуск нового экземпляра существующего действия.

Ответ 2 · рейтинг 13 · Thinkisto

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы