Установка launchMode = "singleTask" против установки активности launchMode = "singleTop"

У меня есть приложение, которое очень иерархично (действия похожи на Лигу> Команда> Позиция> Игрок), и поэтому я сделал каждое действие singleTop , чтобы сохранить навигацию разумным и предотвратить дублирование экземпляров.

Теперь я делаю свое второе приложение, и я видел, что он предложил объявить мое приложение singleTask для предотвращения дублирования экземпляров. Может ли кто-нибудь помочь объяснить преимущества каждого подхода?

Мое новое приложение – это всего лишь активность с тремя фрагментами, и тогда я, вероятно, добавлю активность настроек и, возможно, FAQ.

EDIT: Я просто понял, что singleTask НЕ предотвращает дублирование экземпляров моего приложения, как я и думал. Теперь ищем правильный способ справиться с этим …

Solutions Collecting From Web of "Установка launchMode = "singleTask" против установки активности launchMode = "singleTop""

Я думаю, что ваше определение singleTop и singleTask немного не работает. SingleTop может создать дубликат экземпляра. Давайте используем ваш пример: League> Team> Position> Player. Если на экране проигрывателя есть кнопка, которая приведет вас к экрану лиги, она станет Лигой> Командой> Позиция> Игрок> Лига.

В то время как singleTask гарантирует, что может существовать только один экземпляр действия.

Действие Android actionMode

4 режима …

"Standard" "singleTop" "singleTask" "singleInstance"

Режим по умолчанию «стандартный».

Режимы делятся на две группы. Стандартный и singleTop входит в одну сторону, а singleTask и singleInstance входят в другую сторону.

Основное различие между стандартным и singleTop стандартно, каждый раз при новом намерении для стандартной активности создается новый экземпляр. В случае singleTop также создается новый экземпляр, но экземпляр активности уже находится в верхней части стека, он не создает новый экземпляр.

На самом деле проблема возникает, когда мы загружаем приложение с сервера и запускаем его и открываем его там. После запуска приложения нажмите кнопку «Домой». Затем щелкните все программы и выберите значок приложения с главного экрана. Тогда в стандартном случае будет создано другое действие, но в singleTop новый экземпляр не будет создан.

Режимы «singleTask» и «singleInstance» также отличаются друг от друга только в одном отношении: активность «singleTask» позволяет другим действиям быть частью его задачи. Он находится в корне стека активности, но другие действия (обязательно «стандартные» и «одиночные» действия) могут быть запущены в одну и ту же задачу. С другой стороны, деятельность «singleInstance» не позволяет другим действиям не участвовать в ее задаче. Это единственное занятие в задаче. Если он запускает другое действие, это действие назначается другой задаче – как если бы FLAG_ACTIVITY_NEW_TASK был в намерении.

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-android.html

Я нашел ответ здесь: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

"SingleTop":

Отличие от «стандарта» заключается в том, что если экземпляр активности уже существует в верхней части текущей задачи и системные маршруты, предназначенные для этого действия, новый экземпляр не будет создан, поскольку он будет отключать метод onNewIntent () вместо создания Новый объект. Давайте примем интеграцию Twitter-oauth в качестве примера.

"singleTask":

Новая задача всегда будет создана, и новый экземпляр будет перенесен в задачу как корневая. Однако, если какой-либо экземпляр активности существует в любых задачах, система направляет намерение на этот экземпляр активности через вызов метода onNewIntent (). В этом режиме экземпляры активности могут быть перенесены в одну и ту же задачу. И если пользователь нажимает клавишу BACK из действия singleTask, система вернет пользователя к предыдущему действию.

Из режима запуска активности :

Стандарт (по умолчанию): – Несколько экземпляров класса активности могут быть созданы и несколько экземпляров могут быть добавлены к одной и той же задаче или различным задачам. Это общий режим для большинства видов деятельности.

SingleTop: – Разница со стандартом заключается в том, что если экземпляр активности уже существует в верхней части текущей задачи, и система направляет намерение на это действие, новый экземпляр не будет создан, потому что он отключит метод onNewIntent () Вместо создания нового объекта.

SingleTask: – Новая задача всегда будет создана, и новый экземпляр будет перенесен на задание в качестве корня. Однако, если какой-либо экземпляр активности существует в любых задачах, система направляет намерение на этот экземпляр активности через вызов метода onNewIntent (). В этом режиме экземпляры активности могут быть перенесены в одну и ту же задачу. Этот режим полезен для действий, которые действуют как точки входа.

SingleInstance: – То же, что и singleTask, за исключением того, что экземпляр no activities не может быть перенесен в ту же задачу singleInstance. Соответственно, активность с режимом запуска всегда находится в одной задаче экземпляра действия. Это очень специализированный режим и должен использоваться только в приложениях, которые реализованы полностью как одно действие.