Главная » Разработка для Android » Описание поведения при запуске и поведения задачи в Android приложении

0

 

В API Android нет специального класса, который представлял бы собой задачу, и объекты-задачи не удастся контролировать при помощи вызовов тех или иных методов. Поведение задачи регламентируется параметрами, указываемыми в файле описания программы. Кроме того, на поведение задачи можно повлиять, создавая и используя намерения. Рассказывая о том, как контролируется поведение задачи, мы покажем, как тесно переплетены жизненный цикл активности и поведение задачи.

Режим запуска

Режим запуска активности – это атрибут, задаваемый в теге Activity в файле описания приложения. Данный атрибут влияет на поведение задачи и опосредованно – на жизненный цикл.

У атрибута android:launchMode может быть одно из четырех значений. Все они являются взаимоисключающими.

"standard" – задается по умолчанию. Если атрибут android:launchMode имеет такое значение, активность может запускаться многократно. Одновременно может существовать несколько экземпляров данного класса Activity. Эти экземпляры могут относиться к нескольким задачам, но как правило – к той задаче, которая вызывала startActіvіty () для запуска активности. Рисунок 11.8 демонстрирует несколько экземпляров активности на верхнем уровне задачи.

Рис. 11.8. Стандартный режим запуска, при котором создается новая активность

"singleTop" – отличается от режима "standard". Если уже существует экземпляр активности с таким значением атрибута android:TaunchMode и эта активность входит в состав задачи, к которой будет относиться и новая активность, располагаясь при этом на верхнем уровне этой задачи, то именно существующая активность получит объект Intent через метод onNewIntent(), а новая активность запускаться не будет. На рис. 11.9 показан одиночный экземпляр активности "singleTop", находящийся на верхнем уровне задачи.

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

" sіngleTask" – указывает, что активность, которую следует запустить, образует корень новой задачи. Если экземпляр такой активности уже существует, то реализуется такое же поведение, как в случае с "singleTop", и объект Intent, ассоциированный с запуском данной активности, обрабатывается путем вызова к onNewIntent().

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

Привязка к задаче

Атрибут android: taskAffіnity может иметь то же значение, что и присваиваемый активности атрибут android: name. Если атрибут android: taskAffіnity не задать, то его стандартным значением будет имя пакета, указанное в теге <manifest>.

Привязка к задаче (task affinity) используется для помещения активности в конкретную задачу. То есть если вас не устраивает стандартное поведение, заданное в Android (при котором новые активности становятся частью той задачи, в которой они были запущены), то можно воспользоваться привязкой к задаче, позволяющей переопределить стандартное поведение и указать желаемую задачу для данной активности. Как правило, эта задача ассоциирована с приложением, которое реализует рассматриваемую активность.

Другие атрибуты активности, влияющие на поведение задачи

К другим атрибутам, изменяющим поведение задачи, относится в том числе android:noHistory. Если этот атрибут имеет значение true, то, когда пользователь покидает активность, она не перемещается в стек активностей. Подобное свойство полезно для таких активностей, как формы входа в систему – действительно, после того, как пройдет аутентификация, возвращаться к этой активности не требуется.

Атрибут android: process в качестве значения может иметь имя процесса, в котором будет работать активность, – без указания этого атрибута активность начинает работать в первом компоненте, который запустится для нее в приложении. Этот атрибут особенно примечателен тем, что он не влияет на поведение задачи: хотя активность работает в ином процессе, она попадает в нужную задачу, как если бы работала в том самом процессе, в котором запустилась.

Атрибут android:fіnishOnTaskLaunch вызывает завершение любого экземпляра активности с таким атрибутом, если с этим же атрибутом запускается новая активность. При использовании такого атрибута разработчик гарантирует, что из активностей с этим атритбутом никогда не образуется стек, подобная активность является одной-единственной на все имеющиеся задачи.

Атрибут android:alwaysRetainTaskState, имеющий значение true, сообщает системе Android, что стек активностей, находящихся выше корневой активности, никогда не должен очищаться. По умолчанию система может очистить стек активностей выше корневой активности после определенного временного интервала, в течение которого активность не используется.

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

По теме:

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