Android SingleTask или режим запуска SingleInstance?

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

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

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

3 ответа

Решение

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

By default, all the activities in an application have an affinity for each other — that is, there's a preference for them all to belong to the same task.

A "singleInstance" activity stands alone as the only activity in its task. Если он запускает другое действие, то это действие будет запущено в другую задачу независимо от режима запуска - как если бы FLAG_ACTIVITY_NEW_TASK был в намерении. Во всех других отношениях режим "SingleInstance" идентичен "SingleTask".

Как отмечалось выше, никогда не бывает более одного экземпляра действия "singleTask" или "singleInstance", поэтому ожидается, что этот экземпляр будет обрабатывать все новые намерения. Действие "singleInstance" всегда находится на вершине стека (поскольку это единственное действие в задаче), поэтому оно всегда в состоянии обработать намерение. However, a "singleTask" activity may or may not have other activities above it in the stack. Если это так, он не в состоянии обработать намерение, и намерение отбрасывается. (Even though the intent is dropped, its arrival would have caused the task to come to the foreground, where it would remain.)

4 Действия в задании

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

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

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

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

По-простому

singleTask:

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

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

singleInstance-

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

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

Другие вопросы по тегам