Вопрос

Я прочитал руководство разработчика 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

Что означает:

  1. То ActivityC будет удален из task1, а ActivityB станет главным действием.

  2. Если пользователь сейчас нажмет на кнопку "Назад", он перейдет к 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

enter image description here

Источники находятся по адресу https://github.com/gnorsilva/Activities-LaunchMode-demo

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top