На странице " Основы приложений " руководства для разработчиков Android:
По умолчанию все действия в приложении похожи друг на друга, то есть есть предпочтение, чтобы все они принадлежали одной задаче.
Действие «singleInstance» является единственным действием в своей задаче. Если он запускает другое действие, это действие будет запущено в другой задаче независимо от его режима запуска - как если бы FLAG_ACTIVITY_NEW_TASK был в намерении. Во всем остальном режим singleInstance идентичен режиму singleTask.
Как отмечалось выше, никогда не бывает более одного экземпляра действия «singleTask» или «singleInstance», поэтому ожидается, что этот экземпляр будет обрабатывать все новые намерения. Действие «singleInstance» всегда находится на вершине стека (поскольку это единственное действие в задаче), поэтому оно всегда в состоянии обработать намерение. Однако действие "singleTask" может иметь или не иметь другие действия в стеке над ним. Если это так, значит, он не в состоянии обработать намерение, и намерение отбрасывается. (Даже если намерение отброшено, его прибытие привело бы к тому, что задача переместилась бы на передний план, где она и останется.)
Поскольку в любом из режимов запуска никогда не бывает более одного экземпляра Activity, кнопка «Назад» всегда приведет вас к существующему экземпляру Activity в вашем случае.
Важное отличие состоит в том, что для «singleTask» не требуется создание новой задачи для новых Activity, запускаемых при выборе чего-либо. И ему не придется каждый раз удалять эту новую задачу на кнопке возврата.
Поскольку ваш стек Activity относится к одной пользовательской «задаче», и не похоже, что у вас сложная структура Intent, где singleInstance может быть полезен для их обработки, я бы предложил использовать режим запуска singleTask.
Вот хорошее сообщение в блоге для получения дополнительной информации, а также указание на изображение: Серия «Действия и задачи Android» - Введение в компонентную модель пользовательского интерфейса Android.
FLAG_ACTIVITY_CLEAR_TOP
.По-простому -
singleTask:
Система создает новую задачу и инстанцирует действие в корне новой задачи. Однако, если экземпляр действия уже существует в отдельной задаче, система направляет намерение существующему экземпляру через вызов его
onNewIntent()
метода, а не создает новый экземпляр. Одновременноone instance
может существовать только действие.singleInstance-
То же, что и
"singleTask"
, за исключением того, что система не запускает никаких других действий в задаче, содержащей экземпляр . Действие всегда является единственным и единственным участником своей задачи; любые действия, начатые этим, открываются в отдельной задаче .источник
singleTask
иsingleInstance
действия могут только начать задачу. Они всегда находятся в корне стека действий. Более того, устройство может одновременно хранить только один экземпляр активности - только одну такую задачу.для более android: launchMode .
источник
singleTask
- система создает новую задачу и инстанцирует действие в корне новой задачи. Однако, если экземпляр действия уже существует в отдельной задаче, система направляет намерение существующему экземпляру через вызов егоonNewIntent()
метода, а не создает новый экземпляр. Одновременно может существовать только один экземпляр действия. подробнее developer.android.com