Статьи

Деятельность, задачи и намерения, о мой!

Всякий раз, когда вы читаете о разработке для Android, вы увидите, что слово « Активность» всплывает постоянно. В этой статье мы расскажем, что такое действия и как они связаны с задачами, процессами и Back Stack, работающими на телефоне.

мероприятия

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

Каждое действие определяется как подкласс android.app.Activity и должно быть объявлено в файле манифеста вместе с объявлением о том, как можно начать действие. У действия также есть жизненный цикл, отвечающий следующему конечному автомату:

Содержание Android Рисунок 1

Деятельность State Machine

Когда действие на экране, оно работает (зеленый на диаграмме). Когда Android меняет действия, он будет приостановлен. Разработчик несет ответственность за остановку любых ресурсоемких задач (например, Animation, Graphics), которые выполняются при onPause() метода onPause() . Android также может потребовать, чтобы Activity была остановлена, потому что она хочет восстановить память. Когда это происходит, деятельность может быть остановлена. Как и прежде, разработчик несет ответственность за освобождение любой памяти, когда это возможно, при отправке onStop() . Наконец, когда приложение закрывается, onDestroy() метод onDestroy() . Существуют также соответствующие onCreate() , onStart() и onResume() , которые используются, когда действие постепенно onResume() состояние.

Действия могут быть начаты или возобновлены в любое время. Важно, чтобы разработчик вставил правильный код в свою деятельность, чтобы сохранить любую информацию о состоянии. Например, по умолчанию Android будет заново создавать действие при повороте экрана, чтобы позволить действию использовать другой макет и компоненты. Это можно переопределить, но это служит примером. Разработчики должны поместить код в onStart() и onStop() чтобы сохранить любое требуемое состояние.

Связывание действий вместе с Back Stack

Большинство приложений будет состоять из одного или нескольких экранов, и Android имеет очень сильный механизм возврата благодаря использованию специальной кнопки возврата. Он реализует это с помощью Back Stack. Когда вы нажимаете на приложение в домашнем приложении, Android запускает задний стек и активирует домашнюю активность. Если приложение затем переходит к другому действию, вызываются соответствующие события жизненного цикла, а затем оно помещается в стек, становясь самым верхним (активным) действием.

Android Intents Рисунок 2

Android Back Stack

Пока все это звучит очень прямо, верно? Каждая операционная система телефона в наши дни работает таким образом. Android немного отличается тем, что задний стек может содержать действия из разных приложений, сгруппированных в нечто, называемое задачей.

Одно приложение может запустить действие в другом приложении, используя то, что называется Intent (о чем мы поговорим позже). Это позволяет различным приложениям сотрудничать, но без необходимости знать слишком много друг о друге. Например, вы можете отправить электронное письмо из вашего приложения, когда пользователь нажимает кнопку «Обратная связь». Когда это происходит, Android переносит действие композитора из приложения Gmail в задний стек для задачи, и пользователь печатает их сообщение. Когда они заканчивают (или нажимают назад), Android отключает действие gmail и возвращает вас к следующему действию, которое будет вашим приложением. Это создает впечатление, что приложения работали вместе как единое целое… хорошо Задача… когда на самом деле они полностью независимы.

Содержание Android Рисунок 3

Смешивание приложений в задаче

Также возможно иметь более одной активной задачи одновременно. Допустим, вы загружаете приложение и детализируете несколько действий до нужного, затем нажимаете кнопку « Домой» и запускаете другое приложение. Android запоминает состояние, в котором вы были ранее в задании. Затем он запускает новую задачу для вашего нового приложения, которую вы можете развернуть еще немного. Теперь вы можете вернуться и переключаться между этими двумя задачами, каждый раз возвращаясь точно туда, где вы были раньше, благодаря запомненной задаче и ее заднему стеку.

По умолчанию Android забудет о задачах через некоторое время, если вы не вернетесь к ним. Смысл в том, что если вы не использовали задачу в течение определенного периода, вы потеряли к ней интерес, и ее можно закрыть. Это объясняет, почему, если вы выйдете, скажем, из своего веб-браузера, но вернетесь к нему вскоре после этого, вы вернетесь к последней странице, на которой вы были, но если вы вернетесь через несколько дней, это может вернуть вас на домашнюю страницу. Все это автоматически управляется Android.

Содержание: навигация между действиями (среди прочего).

Ранее мы упоминали, что навигацией между действиями управляет Intents. Intent — это тип сообщения, которое приложения передают через Android OS заинтересованным лицам по телефону. Затем приложения регистрируют себя в качестве прослушивателей этих событий Intent с помощью файла манифеста Android и принимают соответствующие меры. При правильном использовании они могут быть очень мощными.

Простейшим примером навигации между действиями в приложении является использование явного намерения. Используя этот метод, разработчик может указать определенный класс Activity, который он хочет запустить (например, используя метод startActivity() в Activity ). Это очень просто и хорошо документировано в документации для разработчиков Android. Давайте посмотрим, как можно отправить электронное письмо, используя намерение. Вот фрагмент из одного из моих приложений, который позволяет пользователям отправлять мне диагностические журналы:

 Intent sendIntent = new Intent(Intent.ACTION_SEND); // Add attributes to the intent sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Log dump from NodeDroid"); sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); sendIntent.putExtra(Intent.EXTRA_TEXT, ""); sendIntent.setType("application/zip"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(dumpFile)); startActivity(Intent.createChooser(sendIntent, "Email:")); 

В этом примере кода я создал намерение и дал ему действие ( Intent.ACTION_SEND ) и установил несколько дополнительных полей, чтобы указать, к кому следует обращаться по электронной почте, теме и Intent.ACTION_SEND файлу. Наконец, я вызываю startActivity() для запуска намерения. При запуске намерение передается на ОС Android, которая проверяет, какие приложения могут на него ответить. Если более чем одно приложение может ответить (что было бы довольно распространенным в этом случае), ОС предоставляет пользователю выбор приложения для обработки намерения, а также возможность выбрать это в качестве значения по умолчанию для использования в будущем. Когда выбор сделан, действие начинается, и отображается экран составления.

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

Завершение

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