Оценить:
 Рейтинг: 0

Программирование приложений для мобильных устройств под управлением Android. Часть 1

Год написания книги
2015
<< 1 2
На страницу:
2 из 2
Настройки чтения
Размер шрифта
Высота строк
Поля

И наконец, есть некоторый код, который определяет что сделать, когда пользователь нажимает кнопку Show Map. Этот код реализует интерфейс onClickListener («слушатель» кликов), в котором есть метод onClick, вызывающийся каждый раз, когда пользователь кликает по кнопке. Код в методе onClick сначала считывает текст, который пользователь ввел в поле адреса. Затем он обрабатывает этот текст, чтобы удалить пробелы, и преобразовывает его в формат, который понимает «Google Maps». Затем он запускает приложение «Google Maps» и передает ему этот преобразованный адрес.

Что этот код делает, более подробно мы рассмотрим позже, когда погрузимся в изучение классов Activity и Intent. Также для упрощения я не учел любую проверку на ошибки или проверку строки адреса, которая была введена. Но в конечном коде вы обязательно это сделаете.

Следующим шагом в создании Android-приложений является предоставление информации, которая позволяет Андроиду создать пакет приложения или APK, и эта информация записывается в манифесте – xml-файле androidmanifest.xml. Файл androidmanifest.xml содержит большое разнообразие упаковочной информации, включая имя приложения и список компонентов, которые составляют это приложение. Он также включает другую информацию, которую мы обсудим позже. Это такие вещи как: Permissions (полномочия), которые необходимы, чтобы запустить это приложение, аппаратные функции, такие как камера, если она нужна для работы этого приложения, и самая ранняя версия платформы, на которой это приложение сможет работать. Давайте рассмотрим файл androidmanifest.xml для «MapLocation».

Файл androidmanifest.xml находится в корневом каталоге приложения. Один из элементов, который мы видим здесь, является элементом uses-SDK. Этот элемент включает атрибут minSdkVersion, который определяет минимальный уровень API для этого приложения. И в нашем случае этот уровень равняется 13, что соответствуют Android 3.2.

Этот элемент также включает другой атрибут – targetSdkVersion, который определяет последний уровень API, для которого было протестировано это приложение. В данном случае это уровень 19, что соответствует версии Android 4.4.2.

Следующий элемент манифеста – application, который содержит различные атрибуты: иконку для этого приложения, метку, которая показана в строке заголовка приложения, элемент Activity, который перечисляет в нашем случае всего одну Activity – MapLocation, которое включает это приложение.

И последним шагом мы устанавливаем приложение на устройство или эмулятор, чтобы протестировать и отладить его.

Класс Activity

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

Когда пользователь выполняет свою задачу, он перемещается по цепочке из Activity, и Android помогает пользователям в навигации несколькими способами, поддерживая концепцию приложения, обеспечивая временное хранение Activity в стеке (backstack), так что они должным образом могут быть приостановлены и затем возобновлены при возврате из стека.

Таким образом задача (Task) в Android – это ряд связанных Activity. Эти связанные Activity могут, но не должны быть частью одного приложения. Одна задача (Task) может охватить несколько приложений.

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

Стек задачи (Task backstack) работает следующим образом. Когда Activity запущена, она заносится в верхнюю ячейку стека как часть текущей задачи. А когда эта Activity позже будет уничтожена, например, потому что пользователь нажал кнопку «Назад», или потому что Activity сама завершила свою работу программно, или даже потому что сам Android решил уничтожить эту Activity, чтобы освободить занимаемые ей ресурсы, тогда Activity удаляется из верхней ячейки стека задач.

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

Activity имеют жизненный цикл. И что важно для вас как для разработчика, приложения не контролируют свой жизненный цикл. Некоторые изменения жизненного цикла зависят от выбора, который делает пользователь, например нажатие кнопки «Назад» или кнопки «Домой». Другие изменения жизненного цикла зависят от самого Android. Например, если ваше устройство испытывает нехватку памяти, Android может уничтожить activity, которые в настоящее время приостановлены.

Как только Activity запущена, она может быть в состоянии resumed (возобновленном) или running (выполнения). И в то время как она находится в этом состоянии, Activity видима (на экране) и пользователь может взаимодействовать с ней.

Activity может также быть paused (приостановлена). Например, когда новая Activity начинает раскрываться перед ней. В этой ситуации Activity может все еще быть частично видима, но пользователь не может взаимодействовать с ней, потому что он будет взаимодействовать с новой Activity, которая только что запущена (до версии 3.0 Android мог завершить Activity, как только они вошли в приостановленное состояние).

И, наконец, Activity может быть stopped (остановлена). И когда она остановлена, эта Activity больше не видима, и Android может ее уничтожить. Уничтоженная Activity может быть воссоздана позже, если пользователь перемещается к ней по задаче.

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

Чтобы поддерживать сценарии как этот, Android сообщает об изменениях жизненного цикла в Activity, вызывая предопределенные методы (call back) жизненного цикла. И вот некоторые из этих методов:

• onCreate, вызывается перед тем как Activity будет создано;

• onStart, вызывается перед тем как Activity станет видимым;

• onDestroy, вызывается перед тем как Activity будет уничтожена.

И, если вы хотите выполнить некоторые действия, когда ваша Activity изменяет состояние, то вы должны переопределить (override) эти методы в вашей Activity.

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

Давайте представим простое приложение с одной Activity. Оно запускается, ожидает мгновение, и затем закрывается. В этом простом случае как только приложение будет запущено, Android вызовет (call back) метод onCreate.

Затем Android вызовет свой метод onStart, и затем onResume, после которого пользовательский интерфейс Activity появится на экране устройства, и пользователь сможет взаимодействовать с ним.

Приблизительно после одной минуты наша Activity начнет закрываться. И в этот момент Android вызовет метод onPause. Затем onStop. И, наконец, onDestroy. Теперь Activity абсолютно уничтожена.

Итак, как видите, все время жизни Activity заключено между onCreate при запуске и onDestroy в конце.

Когда эта простая Activity запускалась, сперва она не была видима на экране. В некоторый момент она стала видимой, позже она стала невидимой и затем была удалена с экрана.

Когда Activity становятся видимыми, Android иногда вызывает метод onStart, а иногда – onRestart. Перед тем, как Activity станут невидимыми, Android вызывает метод onStop. Таким образом, время жизни Activity в видимом состоянии длится между запуском вызовов onStart и onStop. И, наконец, в то время как Activity видима на экране, есть отрезки времени, когда пользователь может взаимодействовать с ней, и есть моменты когда не может. Например, это может произойти, когда устройство «засыпает». В этом случае пользователь не может взаимодействовать с Activity даже при том, что эта Activity все еще запущена.

Когда Activity оказывается готова к взаимодействию с пользователем, Android вызывает метод onResume. Когда Activity собирается прекратить взаимодействие с пользователем, Android вызывает метод onPause.

Таким образом время жизни Activity, когда она видима и способна взаимодействовать с пользователем, длится между запуском вызовов onResume и onPause.

Теперь давайте более глубоко рассмотрим эти методы жизненного цикла. Первый метод – onCreate вызывается, когда Activity создается. Обычно onCreate используется, чтобы инициализировать Activity и выполнить следующие четыре функции:

• вызов super.onCreate, который сделает часть собственной инициализации Android;

• установка content view Activity, которая сообщит Android, каким должен быть пользовательский интерфейс Activity;

• получение и сохранение всех необходимых ссылок и соответствий между различными элементами (view) лейаута пользовательского интерфейса и кодом Activity;

• конфигурирование элементов пользовательского интерфейса и view.

Давайте рассмотрим метод onCreate приложения «MapLocation». @Override – переопределяет activity.onCreate. В методе onCreate вы видите четыре функции, о которых мы говорили.

Во-первых, есть вызов super.onCreate. Затем есть вызов setContentView с ID файла лейаута R.layout.main в качестве параметра. После этого Activity сохраняет ссылки на view редактирования текста и на кнопку, которые появляются в пользовательском интерфейсе. И, наконец, onCreate присоединяет «слушателя» кнопки button.setOnClickListener. Android вызывает этот код «слушателя» каждый раз, когда пользователь нажимает на кнопку.

оnRestart – следующий метод жизненного цикла. Он вызывается, если Activity, которая была остановлена, будет запущена снова. И вы можете использовать onRestart, чтобы выполнить некоторые действия, которые необходимы, перед тем, как Activity будет запущена снова.


<< 1 2
На страницу:
2 из 2

Другие электронные книги автора Евгений Владимирович Сенько