Главная » Разработка для Android » Изменение поведения задачи при помощи флагов намерений в Android приложении

0

 

Поведение задачи в основном определяется атрибутами тега activity, находящегося в файле описания. Исключения из этого правила позволяет делать набор флагов, которые задаются в объекте Intent.

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

FLAG_ACTIVITY_BROUGHT_TO_FRONT – используется системой для реализации поведения, которое будет применяться, если для Activity заданы атрибуты запуска singleTask или singlelnstance.

FLAG_ACTIVITY_CLEAR_TASK – указывает задачи, которые необходимо очистить перед запуском новой активности, то есть новая активность становится новой корневой активностью задачи.

FLAG_ACTIVITY_CLEAR_TOP – в результате применения этого флага активность, для которой подходит объект Intent с таким флагом, помещается на верхнем уровне стека активностей. Если это стек активностей задачи, выполняемой в настоящий момент, то флаг вызывает завершение всех активностей выше той, что подходит для данного объекта Intent. Та активность, которая оказывается на верхнем уровне стека активностей, тоже завершается и воссоздается, кроме тех случаев, когда она может получить новое намерение посредством метода onNewIntent().

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET – указывает, что запускаемая активность должна оказаться на верхнем уровне нового стека активностей, если текущая задача будет сброшена. «Сброс» в данном случае означает очищение верхней части стека активностей. Это делается по прошествии некоторого времени.

FLAG_ACTI VITY_EXCLUDE_FROM_RECENTS – активность, запускаемая с этим флагом, не сохраняется в стеке активностей.

FLAG_ACTIVITY_FORWARD_RESULT – означает, что новая активность может предоставить результаты той активности, которая запустила текущую активность. Иными словами, родительская активность говорит ей: «Эй, отвечай!»

FLAG_ACTI V ITY_LAUNCHED_FROM_H I STORY – означает, что новая активность была запущена из списка «недавних» активностей, замещая экземпляр, который незадолго до этого был разрушен.

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

FLAG_ACTIVITY_NEW_TASK – означает, что новая активность является корнем новой задачи, если только не задан еще и флаг FL AG_ACT IVI TY_MULT I PL E_TASK. В последнем случае создается несколько задач с одной корневой активностью и применяются упомянутые выше предосторожности.

FL AG_ACTIVITY_NO_ANIMATION – подавляет анимацию переходов (transition animation).

FLAG_ACTIVITY_NO_HISTORY – новая активность не входит в «стек переходов назад». Флаг аналогичен атрибуту noHistory.

FLAG_ACTIVITY_NO_USER_ACTION – подавляет обратный вызов onUserLeaveHint для актуальной активности. Поскольку указанный обратный вызов используется для удаления уведомлений, такого удаления происходить не будет. Данный флаг полезно использовать при переходах между активностями, если переход не инициирован пользователем, например в случаях, когда телефон принимает входящий вызов или SMS-сообщение.

FLAG_ACTIVITY_PREVIOUS_IS_TOP – этот флаг означает, что новая активность не будет восприниматься как находящаяся на верхнем уровне стека активностей. Вместо этого на верхнем уровне будет оставаться предыдущая активность. Флаг используется для принятия решения о том, следует ли передать намерение верхней активности либо специально создать новую активность. Нам неизвестны случаи практического применения этого флага.

FLAG_ACTIVITY_REORDER_TO_FRONT – если активность уже работает, то она будет поднята на верхний уровень стека активностей и станет видимой.

Часть из описанных флагов появилась еще в API уровня 1 и игнорируется в более ранних API.

Некоторые перечисленные флаги переопределяют поведение задачи, данное в файле описания. Какие-то флаги влияют на другие поведения, например на анимацию переходов. А в некоторых случаях постановка флага у объекта Intent – это единственный способ изменить поведение задачи.

Применяйте такие флаги с осторожностью. Неожиданное поведение задачи может дезориентировать пользователя в итнтерфейсе Android.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии