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


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

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

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

3 85

3 ответа:

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

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

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

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

4 Activities in a Task

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

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

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

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

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

singleTask:

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

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

singleInstance-

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

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