У меня есть приложение, в котором я запускаю медиаплеер, и я хочу возобновить активность из моей домашней активности приложений.
Я могу успешно сделать это, добавив следующие флаги в вызов startActivity:
myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Я беспокоюсь, что это не идеальный способ сделать что-то, так как мне потребовалось много времени, чтобы найти его. Это заставило меня думать, что никто не использует его очень много.
Есть ли подводные камни при использовании этого метода?
Ответ 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.