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

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

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

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

3 ответов


с Основы Применения страница руководства Android dev:

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

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

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

4 Activities in a Task

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

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

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

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


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

singleTask:

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

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

singleInstance-

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


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