О режиме запуска Android “singleTask”
-
12-12-2019 - |
Вопрос
Я прочитал руководство разработчика Android и некоторые статьи в Интернете, я все еще в замешательстве по поводу singleTask
launchmode
.Давайте возьмем пример:
Пользователь запускает приложение1, Android запускает новую задачу.Предположим, что App1 создает действия в следующем порядке:
ActivityA -> ActivityB -> ActivityC
Вот как выглядит задача 1.
Затем пользователь нажимает кнопку "Домой" и выбирает запуск App2, поэтому task1 переходит в фоновый режим, а Android запускает новую задачу:задача 2, пользователь что-то делает:
ActivityD -> ActivityE
теперь давайте скажем ActivityE
попробуйте начать ActivityB
, и ActivityB
имеет режим запуска singleTask
.
Что я понимаю, так это то, что задача 1 снова переходит во внешний интерфейс, а задача 2 переходит в фоновый режим.И задача 1 теперь выглядит следующим образом:
ActivityA -> ActivityB
Что означает:
То
ActivityC
будет удален из task1, а ActivityB станет главным действием.Если пользователь сейчас нажмет на кнопку "Назад", он перейдет к
ActivityA
из задачи 1 вместо возврата кActivityE
из задачи 2
я прав?
Спасибо
Решение
ActivityC будет удален из task1, а ActivityB станет главным действием.
Да, вы правы...
ActivityC будет удален из т.е.будет вызван метод onDestroy ActivityC.Следовательно, когда пользователь снова запускает задачу 1, отображается ActivityB, а не ActivityC.
Создали 2 задачи (проекта) и загрузили те же самые @ Пространство отправки.Попробуй это...
Если вы посмотрите на андроидов документация там написано
" Действие "singleTask" позволяет другим действиям быть частью его задачи.Это всегда лежит в основе его задачи, но другие действия (обязательно "стандартные" и "одиночные") могут быть запущены в рамках этой задачи."
Это означает, что когда вы нажимаете кнопку "Домой", все действия, указанные выше действия с одной задачей (которое в вашем случае является ActivityB), удаляются из стека.
В примере приложения, который я дал вам ранее, если вы просто запустите проект "androidTest" и нажмете кнопку "Домой" в журналах, вы можете увидеть, что 2-е действие ставится на паузу, а когда вы запускаете его снова из списка "Последние приложения", 2-е действие уничтожается.
В senario, где действия, указанные выше действий единственного экземпляра (ActivityB), не удаляются из обратного стека, и другое приложение запрашивает это действие (ActivityB), оно может не отображаться, и намерение может быть удалено.Но у этого гораздо меньше шансов произойти, потому что пользователю придется нажать кнопку "Домой" и закрыть текущую задачу \ приложение в фоновом режиме, прежде чем он сможет перейти к другой задаче\приложению.
Отсюда и предупреждение
Другие режимы — singleTask и singleInstance — не подходят для большинства приложений, поскольку они приводят к модели взаимодействия, которая, вероятно, будет незнакома пользователям и сильно отличается от большинства других приложений.
Я надеюсь, что это разрешит ваши сомнения.
Другие советы
Похоже, ты прав.
Почему бы тебе не проверить это?
Существует также это приложение, которое может помочь объяснить режим запуска:
https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode
Источники находятся по адресу https://github.com/gnorsilva/Activities-LaunchMode-demo