Android singleTask или singleInstance запускают режим?

У меня есть приложение, которое имеет свой основной список, а затем вы можете щелкнуть элементы, которые открывают подробный вид этого элемента. У меня также есть активность поиска, которая похожа на основную деятельность и работает по назначению.

Однако я хочу, чтобы эта операция поиска имела только один экземпляр в стеке, чтобы пользователи могли выполнять поиск несколько раз, а щелчок назад возвращал их в представление previouse, в котором они были, до того, как они начали поиск (вместо того, чтобы вернуться к предыдущей результаты поиска)

оба режима запуска singleTask и singelInstance, похоже, делают то, что я хочу, поэтому я не уверен, какой из них я должен использовать для этой цели и почему?

Ответ 1

На странице Основы приложений руководства разработчика Android:

По умолчанию все действия в приложения имеют сродство к каждому другое - то есть предпочтение для них все должны принадлежать одному и тому же Задача.

Значения активности "singleInstance" как единственная деятельность в ее задача. Если он начнет другую деятельность, эта деятельность будет запущена в различная задача, независимо от ее режим запуска - как будто FLAG_ACTIVITY_NEW_TASK был в намерение. Во всех других отношениях Режим "singleInstance" идентичен "SingleTask".

Как отмечалось выше, никогда больше чем один экземпляр "singleTask" или "singleInstance", так что экземпляр, как ожидается, будет обрабатывать все новые намерения. Активность "singleInstance" всегда находится в верхней части стека (поскольку это единственная деятельность в задача), поэтому он всегда в состоянии обрабатывать намерение. Однако Активность "singleTask" может или не может имеют другие виды деятельности над ним в стек. Если да, то это не позиции, чтобы справиться с намерением, и намерение отбрасывается. (Хотя намерение прекращается, его прибытие привели к тому, что задача на переднем плане, где он останется.)

4 Activities in a Task

Поскольку в действии с одним из режимов запуска не более одного экземпляра, кнопка "Назад" всегда приведет вас к существующему экземпляру Activity в вашем случае.

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

Поскольку ваш стек Activity все относится к одной задаче пользователя, и это не похоже на то, что у вас есть сложная структура Intent, где singleInstance может быть полезной для их обработки, я бы предложил использовать режим запуска singleTask.

Вот хорошее сообщение в блоге для получения дополнительной информации, а также зачисление на изображение: Серия действий и задач Android - Введение в компонентную модель андроидов UI

Ответ 2

Простым способом -

singleTask:

Система создает новую задачу и запускает действие в корне новой задачи. Однако, если экземпляр активности уже существует в отдельной задаче, система перенаправляет намерение на существующий экземпляр посредством вызова его метода onNewIntent(), а не создает новый экземпляр. Только one instance активности может существовать одновременно.

Примечание. Хотя действие начинается с новой задачи, кнопка "Назад" все еще возвращает пользователя к предыдущему действию.

SingleInstance -

То же, что и "singleTask", за исключением того, что система не запускает никаких других действий в задачу, содержащую экземпляр. Деятельность всегда является единственным и единственным ее членом; любые действия, начинающиеся с этого, открываются в отдельной задаче.

Ответ 3

singleTask и singleInstance действия могут только начинать задание. Они всегда находятся в корне стека активности. Кроме того, устройство может удерживать только один экземпляр активности за один раз - только одна такая задача.
для более android: launchMode.