Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Действие Android actionMode

4 режима...

"стандарт" "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

Ответ 3

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

"SingleTop":

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

"singleTask":

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

Ответ 4

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

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

singleTop: - отличие от стандарта - это если экземпляр активность уже существует в верхней части текущей задачи, а система перенаправляет намерение на это действие, новый экземпляр не будет создан потому что он отключит метод onNewIntent() вместо создания новый объект.

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

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