Слайд 1Разработка приложений для ОС Android
Вводные всякие интересные слова
В рамках этого
курса мы узнаем (точнее, вы):
как создавать программу для ОС Android
как
использовать преимущества этой ОС
как создать красивый и функциональный интерфейс вне зависимости от экранных размеров устройства
как применять стили и темы
как добавить аудио и видео
как использовать GPS-навигацию
и т.д.
Если у вас есть: базовые знания ООП, java, навыки работы с eclipse, умение использовать телефон на ОС Android, то вам будет гораздо проще освоить этот курс :>
Слайд 2Разработка приложений для ОС Android
Введение. История Android
Android – открытая операционная
система для мобильных телефонов, смартфонов, коммуникаторов, планшетных компьютеров, электронных книг,
цифровых проигрывателей, наручных часов, нетбуков и смартбуков, основанная на ядре Linux и поддерживающая различные аппаратные платформы, такие как ARM, MIPS, POWER, x86.
Изначально разрабатывалась компанией Android Inc., которую затем (июль, 2005) купила Google. Впоследствии (ноябрь, 2007) Google инициировала создание бизнес-альянса Open Handset Alliance (в его состав вошли Google, HTC, Intel, Motorola, Nvidia и другие компании), который и занимается сейчас поддержкой и дальнейшим развитием платформы.
С момента выхода первой версии (сентябрь, 2008) произошло несколько обновлений системы. Эти обновления, как правило, касаются исправления обнаруженных ошибок и добавления нового функционала в систему. Каждая версия системы получает собственное кодовое имя на тему десерта.
Слайд 3Разработка приложений для ОС Android
Инструментарий разработчика
Перед тем, как приступить к
созданию Android-приложений, необходимо выбрать подходящий инструментарий разработки.
Как правило, разработка Android-приложений
осуществляется на языке Java. Поэтому, в первую очередь, необходимо установить Java Development Kit (JDK). Но для начала следует разобраться, что представляет из себя Java.
Java – это объектно-ориентированный язык программирования. Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java, которая обрабатывает байтовый код и передает инструкции оборудованию как интерпретатор. Достоинство подобного способа выполнения программ заключается в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Следует заметить, что фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, схожий с С/C++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров и операторов. Поэтому те, кто уже имеет опыт программирования на C/C++, смогут быстро освоиться и начать писать Java-приложения.
Слайд 4Разработка приложений для ОС Android
Инструментарий разработчика
JDK – это бесплатно распространяемый
комплект разработчика приложений на языке Java, включающий в себя компилятор
Java, стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java Runtime Environment (JRE). В состав JDK не входит интегрированная среда разработки (Integrated Development Environment). Поэтому после того, как будет установлен JDK, следует установить IDE.
Существует несколько популярных сред разработки, но в данном курсе мы остановим свой выбор на Eclipse IDE и соответствующем для нее плагине Android Development Tools (ADT).
Android Software Development Kit (SDK) содержит множество инструментов и утилит для создания и тестирования приложений. Например, с помощью SDK Manager можно установить Android API любой версии, а также проверить репозиторий на наличие доступных, но еще не установленных пакетов и архивов.
Android Native Development Kit (NDK) позволяет осуществлять разработку Android-приложений на языке C/C++. Зачем это может потребоваться? Есть несколько причин. Например, необходимость использовать код, который уже написан для нативной платформы, или ускорение выполнения критических кусков кода.
Слайд 5Разработка приложений для ОС Android
Архитектура Android
Слайд 6Разработка приложений для ОС Android
Архитектура Android
Applications. Android поставляется с набором
основных приложений, включающим календарь, карты, браузер, менеджер контактов и другие.
Все перечисленные приложения написаны на Java.
Application Framework. Предоставляя открытую платформу разработки, Android дает разработчикам возможность создавать гибкие и инновационные приложения. Разработчики могут использовать аппаратные возможности устройства, получать информацию о местоположении, выполнять задачи в фоновом режиме, устанавливать оповещения и многое другое. Разработчики имеют полный доступ к тем же API, что используются в основных приложениях.
Архитектура приложений разработана с целью упрощения повторного использования компонентов; любое приложение может "публиковать" свои возможности и любое другое приложение может затем использовать эти возможности (с учетом ограничений безопасности). Этот же механизм позволяет заменять стандартные компоненты на пользовательские.
Слайд 7Разработка приложений для ОС Android
Архитектура Android
Libraries. Android включает в себя
набор C/C++ библиотек, используемых различными компонентами системы. Эти возможности доступны
разработчикам в контексте применения Android Aplication Framework. Некоторые основные библиотеки, перечислены ниже:
- Mедиа библиотеки – эти библиотеки предоставляют поддержку воспроизведения и записи многих популярных аудио, видео форматов и форматов изображений, в том числе MPEG4, MP3, AAC, AMR, JPG, PNG и других;
- Surface Manager – управляет доступом к подсистеме отображения 2D и 3D графических слоев;
- LibWebCore – современный веб-движок, на котором построен браузер Android;
- SGL – основной графический движок 2D;
- 3D библиотеки – реализованы на основе OpenGL; библиотеки используют либо аппаратное 3D-ускорение (при его наличии), либо включены программно;
- FreeType – поддержка растровых и векторных шрифтов
- SQLite – механизм базы данных, доступной для всех приложений.
Слайд 8Разработка приложений для ОС Android
Архитектура Android
Android Runtime. Android включает в
себя набор основных библиотек, которые обеспечивают большинство функций, доступных в
библиотеках Java. Каждое приложение Android работает в своем собственном процессе, со своим собственным экземпляром виртуальной машины Dalvik. Dalvik была написана так, что устройство может работать эффективно с несколькими виртуальными машинами одновременно.
Dalvik проектировалась специально под платформу Android. Виртуальная машина оптимизирована для низкого потребления памяти и работы на мобильном аппаратном обеспечении. Dalvik использует собственный байт-код. Android-приложения переводятся компилятором в специальный машинно-независимый низкоуровневый код. И именно Dalvik интерпретирует и выполняет такую программу при выполнении на платформе. Кроме того, с помощью специальной утилиты, входящей в состав Android SDK, Dalvik способна переводить байт-коды Java в коды собственного формата и также исполнять их в своей виртуальной среде.
Linux Kernel. Android основан на Linux версии 2.6 с основными системными службами – безопасность, управление памятью, управление процессами и модель драйверов. Разработчики Android модифицировали ядро Linux, добавив поддержку аппаратного обеспечения, используемого в мобильных устройствах и, чаще всего, недоступного на компьютерах.
Слайд 9Разработка приложений для ОС Android
Обзор Java-интерфейсов
Для прикладного программиста Android –
это набор интерфейсов на языке Java. Рассмотрим, как он организован.
В основе набора – пакеты, входящие в стандарт языка Java, такие как java.util, java.lang, java.io. Они есть на любой платформе, где могут быть запущены java-приложения, и неспецифичны для Android. К ним примыкают расширения, которые не входят в стандарт языка – пакеты javax.net, javax.xml и другие. Но самым большим и интересным является набор интерфейсов, созданных специально для Android. Рассмотрим некоторые из его пакетов.
Пакеты android.view и android.widget отвечают за графический интерфейс пользователя (Graphical User Interface). Они содержат набор встроенных виджетов, таких как кнопки и поля ввода, разметки для расположения виджетов на экране. С их помощью можно создать простейшее Android-приложение.
Для работы с примитивами рисования и графическими файлами предназначен пакет android.graphics, а с помощью android.animation можно создавать несложную анимацию.
Пакет android.opengl предоставляет движок OpenGL, android.gesture осуществляет поддержку управления жестами на сенсорном экране, позволяет распознавать жесты и создавать новые.
Слайд 10Разработка приложений для ОС Android
Обзор Java-интерфейсов
Большое количество интерфейсов предназначено для
коммуникации. Пакет android.net включает стеки сетевых протоколов высокого уровня, таких
как HTTP и SIP, поддержку Wi-Fi. Пакет android.webkit – популярный движок веб-браузера, который позволяет легко отображать веб-страницы в приложении. Пакеты android.bluetooth и android.nfc предоставляют стеки протоколов связи на коротких расстояниях BlueTooth и Near Field Communication соответственно. Пакет android.telephony дает доступ к телефонной функциональности – например, отправка SMS.
Для управления прикладными приложениями предназначен пакет android.app. Пакет android.hardware позволяет обращаться к камере и датчикам, а пакет android.location предоставляет информацию о географических координатах устройства, в том числе с помощью датчика GPS.
Пакет android.media отвечает за кодирование звуковых и видео потоков, для мобильных устройств это до сих пор вычислительно сложная задача, требующая качественной оптимизации. Пакет android.database предоставляет доступ к базам данных.
Слайд 11Разработка приложений для ОС Android
Структура Android-приложения
Android-приложения могут быть простыми и
сложными, но строение приложений всегда будет одинаковым. Есть обязательные элементы
приложений, а есть опциональные, которые используются по мере необходимости. Android-приложение состоит из нескольких основных компонентов: манифест приложения, набор различных ресурсов и исходный код программы.
Какие существуют обязательные и возможные составляющие структуры Android-приложения:
- genФайлы, сгенерированные самой Java. Здесь находится такой важный файл как R.java. Обязательный компонент.
- AndroidManifest.xml - файл манифеста AndroidManifest.xml предоставляет системе основную информацию о программе. Каждое приложение должно иметь свой файл манифеста. Обязательный компонент.
- Src - каталог, в котором содержится исходный код приложения. Обязательный компонент.
- Assets - Произвольное собрание каталогов и файлов. Необязательный компонент.
- Res - Каталог, содержащий ресурсы приложения. В данном каталоге могут находиться подпапки drawable, anim, layout, menu, values, xml и raw. Обязательный компонент.
Слайд 12Разработка приложений для ОС Android
Структура Android-приложения
Файл манифеста AndroidManifest.xml
Файл манифеста AndroidManifest.xml
предоставляет системе основную информацию о программе. Каждое приложение должно иметь
свой файл AndroidManifest.xml. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor, который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения.
Назначение файла:
- описывает компоненты приложения – Activities, Services, Broadcast receivers и Content providers;
- содержит список необходимых разрешений для обращения к защищенным частям API и взаимодействия с другими приложениями;
- объявляет разрешения, которые сторонние приложения обязаны иметь для взаимодействия с компонентами данного приложения;
- объявляет минимальный уровень API Android, необходимый для работы приложения;
перечисляет связанные библиотеки.
Корневым элементом манифеста является
. Помимо данного элемента обязательными элементами являются теги и . Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов.
Слайд 13Разработка приложений для ОС Android
Структура Android-приложения
Файл манифеста AndroidManifest.xml
Кроме обязательных элементов,
упомянутых выше, в манифесте по мере необходимости используются другие элементы.
Перечислим некоторые из них:
-
является корневым элементом манифеста. По умолчанию Eclipse создает элемент с четырьмя атрибутами:
- xmlns:android определяет пространство имен Android.
- package определяет уникальное имя пакета приложения.
- android:versionCode указывает на внутренний номер версии.
android:versionName указывает номер пользовательской версии.
- объявляет разрешение, которое используется для ограничения доступа к определенным компонентам или функциональности данного приложения. В этой секции описываются права, которые должны запросить другие приложения для получения доступа к приложению. Приложение может также защитить свои собственные компоненты (Activities, Services, Broadcast receivers и Content providers) разрешениями. Оно может использовать любое из системных разрешений, определенных Android или объявленных другими приложениями, а также может определить свои собственные разрешения.
Слайд 14Разработка приложений для ОС Android
Структура Android-приложения
Файл манифеста AndroidManifest.xml
-
запрашивает разрешения, которые приложению должны быть предоставлены системой для его
нормального функционирования. Разрешения предоставляются во время установки приложения, а не во время его работы. Наиболее распространненные разрешения:
- INTERNET – доступ к интернету
- READ_CONTACTS – чтение (но не запись) данных из адресной книги пользователя
- WRITE_CONTACTS – запись (но не чтение) данных в адресную книгу пользователя
- RECEIVE_SMS – обработка входящих SMS
- ACCESS_FINE_LOCATION – точное определение местонахождения при помощи GPS
Слайд 15Разработка приложений для ОС Android
Структура Android-приложения
Файл манифеста AndroidManifest.xml
- позволяет
объявлять совместимость приложения с указанной версией (или более новыми версиями
API) платформы Android. Уровень API, объявленный приложением, сравнивается с уровнем API системы мобильного устройства, на который инсталлируется данное приложение. Атрибуты:
android:minSdkVersion определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте.
android:maxSDKVersion позволяет определить самую позднюю версию, которую готова поддерживать программа.
targetSDKVersion позволяет указать платформу, для которой разрабатывалось и тестировалось приложение.
- указывает требуемую для приложения аппаратную и программную конфигурацию мобильного устройства. Спецификация используется, чтобы избежать инсталляции приложения на устройствах, которые не поддерживают требуемую конфигурацию. Если приложение может работать с различными конфигурациями устройства, необходимо включить в манифест отдельные элементы для каждой конфигурации.
Слайд 16Разработка приложений для ОС Android
Файл манифеста AndroidManifest.xml
- объявляет определенную
функциональность, требующуюся для работы приложения. Таким образом, приложение не будет
установлено на устройствах, которые не имеют требуемую функциональность. Например, приложение могло бы определить, что оно требует камеры с автофокусом. Если устройство не имеет встроенную камеру с автофокусом, приложение не будет установлено. Возможные атрибуты:
android.hardware.camera – требуется аппаратная камера.
android.hardware.camera.autofocus – требуется камера с автоматической фокусировкой.
определяет разрешение экрана, требуемое для функционирования приложения. По умолчанию современное приложение с уровнем API 4 или выше поддерживает все размеры экрана и должно игнорировать этот элемент.
- один из основных элементов манифеста, содержащий описание компонентов приложения. Содержит дочерние элементы (, , , и другие), которые объявляют каждый из компонентов, входящих в состав приложения. В манифесте может быть только один элемент .
Слайд 17Разработка приложений для ОС Android
Структура Android-приложения
Ресурсы
В Android принято хранить такие
объекты, как изображения, строковые константы, цвета, анимацию, стили и тому
подобное, за пределами исходного кода. Система поддерживает хранение ресурсов во внешних файлах. Внешние ресурсы легче поддерживать, обновлять и редактировать.
В основном, ресурсы хранятся в виде XML-файлов в каталоге res с подкаталогами values, drawable-ldpi, drawable-mdpi, drawable-hdpi, layout. Но также бывают еще два типа ресурсов: raw и assets.
Для удобства система создает идентификаторы ресурсов и использует их в файле R.java (класс R, который содержит ссылки на все ресурсы проекта), что позволяет ссылаться на ресурсы внутри кода программы. Статический класс R генерируется на основе заданных ресурсов и создается во время компиляции проекта. Так как файл R генерируется автоматически, то нет смысла его редактировать вручную, потому что все изменения будут утеряны при повторной генерации.
В общем виде ресурсы представляют собой файл (например, изображение) или значение (например, заголовок программы), связанные с создаваемым приложением. Удобство использования ресурсов заключается в том, что их можно изменять без повторной компиляции или новой разработки приложения.
Самыми распространенными ресурсами являются, пожалуй, строки (string), цвета (color) и графические рисунки (bitmap).
Слайд 18Разработка приложений для ОС Android
Структура Android-приложения
Ресурсы
Основные ресурсы Android-приложения:
Цвета
/res/colors/ - идентификатор цвета, указывающий на цветовой код.Строки/res/strings/Строковые ресурсы. В
их число также входят строки в формате java и html.
Меню /res/menus/ - меню в приложении можно задать как XML-ресурсы.
Параметры /res/values/ - представляет собой параметры или размеры различных элементов.
Изображения /res/drawable/ - ресурсы-изображения. Поддерживает форматы JPG, GIF, PNG (самый предпочтительный) и другие. Каждое изображение является отдельным файлом. Система также поддерживает stretchable images, в которых можно менять масштаб отдельных элементов, а другие элементы оставлять без изменений.
Отрисовываемые цвета /res/values/ или /res/drawable/ - представляет цветные прямоугольники, которые используются в качестве фона основных отрисовываемых объектов, например точечных рисунков.
Анимация /res/anim/ - Android может выполнить простую анимацию на графике или на серии графических изображений.
Произвольные XML-файлы /res/xml/ - в Android в качестве ресурсов могут использоваться произвольные XML-файлы.
Произвольные необработанные ресурсы /res/raw/ - любые нескомпилированные двоичные или текстовые файлы, например, видео.
Слайд 19Разработка приложений для ОС Android
Структура Android-приложения
Ресурсы
Помимо изображений в каталоге res/drawable
могут храниться ресурсы простых геометрических фигур. Вот лишь некоторые из
возможных атрибутов:
- android:shape задает тип фигуры: rectangle (прямоугольник), oval (овал), line (линия), ring (окружность);
- создает закругленные углы для прямоугольника;
- задает градиентную заливку для фигуры; в Android можно создавать три типа градиентов: Linear (линейный), Radial (радиальный) и Sweep (разверточный);
- задает размеры фигуры;
- задает сплошной цвет для фигуры.
Анимация в Android бывает двух видов:
- Frame Animation – кадровая анимация, традиционная анимация при помощи быстрой смены последовательных изображений, как на кинопленке.
- Tween Animation – анимация преобразований может выполняться в виде ряда простых преобразований: изменение позиции (класс TranslateAnimation), размера (ScaleAnimation), угла вращения (RotateAnimation) и уровня прозрачности (AlphaAnimation). Команды анимации определяют преобразования, которые необходимо произвести над объектом. Преобразования могут быть последовательными или одновременными. Последовательность команд анимации определяется в XML-файле (предпочтительно) или в программном коде.
Слайд 20Разработка приложений для ОС Android
Структура Android-приложения
Ресурсы
В Android имеется еще один
каталог, в котором моrут храниться файлы, предназначенные для включения в
пакет – /assets. Это не ресурсы, а просто необработанные файлы. Этот каталог находится на том же уровне, что и /res. Для файлов, располагающихся в /assets, в R.java не генерируются идентификаторы ресурсов. Для их считывания необходимо указать путь к файлу. Путь к файлу является относительным и начинается с /assets. Этот каталог, в отличие от подкаталога res/, позволяет задавать произвольную глубину подкаталогов и произвольные имена файлов.
Слайд 21Разработка приложений для ОС Android
Структура Android-приложения
Разметка
В Android-приложениях, пользовательский интерфейс построен
на View и ViewGroup объектах. Класс ViewGroup является основой для
подкласса Layout (разметка).
Разметка (также используются термины компоновка или макет) хранится в виде XML-файла в папке /res/layout. Это сделано для того, чтобы отделить код от дизайна, как это принято во многих технологиях (HTML и CSS, Visual Studio и Expression Blend). Кроме основной компоновки для всего экрана, существуют дочерние компоновки для группы элементов. По сути, компоновка – это некий визуальный шаблон для пользовательского интерфейса приложения, который позволяет управлять элементами, их свойствами и расположением. В своей практике вам придется познакомиться со всеми способами размещения.
Android-плагин для Eclipse включает в себя специальный редактор для создания разметки двумя способами. Редактор имеет две вкладки: одна позволяет увидеть, как будут отображаться элементы управления, а вторая – создавать XML-разметку вручную.
Создавая пользовательский интерфейс в XML-файле, можно отделить дизайн приложения от программного кода. Можно изменять пользовательский интерфейс в файле разметки без необходимости изменения программного кода. Например, можно создавать XML-разметки для различных ориентаций экрана мобильного устройства (portrait, landscape), размеров экрана и языков интерфейса. Впрочем, элементы интерфейса можно создавать и программно, когда это необходимо.
Слайд 22Разработка приложений для ОС Android
Структура Android-приложения
Разметка
Каждый файл разметки должен содержать
только один корневой элемент компоновки, который должен быть объектом View
или ViewGroup. Внутри корневого элемента можно добавлять дополнительные объекты разметки или дочерние элементы интерфейса, чтобы постепенно формировать иерархию элементов, которую определяет создаваемая разметка.
Существует несколько стандартных типов разметок:
- FrameLayout является самым простым типом разметки. Обычно это пустое пространство на экране, которое можно заполнить только дочерним объектом View или ViewGroup. Все дочерние элементы FrameLayout прикрепляются к верхнему левому углу экрана. В разметке FrameLayout нельзя определить различное местоположение для дочернего объекта View. Последующие дочерние объекты View будут просто рисоваться поверх предыдущих представлений, частично или полностью затеняя их, если находящийся сверху объект непрозрачен
- LinearLayout выравнивает все дочерние объекты в одном направлении – вертикально или горизонтально. Направление задается при помощи атрибута ориентации android:orientation. Все дочерние элементы помещаются в стек один за другим, так что вертикальный список представлений будет иметь только один дочерний элемент в строке независимо от того, насколько широким он является. Горизонтальное расположение списка будет размещать элементы в одну строку с высотой, равной высоте самого высокого дочернего элемента списка.
Слайд 23Разработка приложений для ОС Android
Структура Android-приложения
Разметка
- TableLayout позиционирует свои
дочерние элементы в строки и столбцы. TableLayout не отображает линии
обрамления для рядов, столбцов или ячеек. TableLayout может иметь ряды с разным количеством ячеек. При формировании разметки таблицы некоторые ячейки при необходимости можно оставлять пустыми. TableLayout удобно использовать, например, при создании логических игр типа Судоку, Крестики-Нолики и тому подобных.
- RelativeLayout позволяет дочерним элементам определять свою позицию относительно родительского представления или относительно соседних дочерних элементов.
Все описываемые разметки являются подклассами ViewGroup и наследуют свойства, определенные в классе View.
Разметки ведут себя как элементы управления, и их можно группировать. Расположение элементов управления может быть вложенным. Например, можно использовать RelativeLayout в LinearLayout и так далее. Однако, слишком большая вложенность элементов управления вызывает проблемы с производительностью.
Слайд 24Разработка приложений для ОС Android
Компоненты Android-приложения
Каждое Android-приложение запускается в своем
собственном процессе. Поэтому приложение изолировано от других запущенных приложений, и
неправильно работающее приложение не может беспрепятственно навредить другим Android-приложениям.
Тем не менее, главным параметром Android-приложения является возможность использовать компоненты других приложений, если они дают на это соответствующие права. Допустим, нам нужен некий компонент с прокруткой для отображения текста, и похожий компонент уже реализован в другом приложении. Тогда у нас есть возможность использовать реализованный компонент. В этом случае наше приложение не копирует необходимый код к себе и не создает ссылку на него. Вместо этого приложение делает запрос на исполнение части кода другого приложения, где есть нужный нам компонент.
В Android существует четыре типа компонентов: Activities, Services, Broadcast receivers и Content providers.
Также важно отметить объекты Intents, в Android-приложениях почти все работает благодаря им. Intent – это механизм для описания одной операции (выбрать фотографию, отправить письмо, сделать звонок, запустить браузер и перейти по указанному адресу и другие). Наиболее распространенный сценарий использования Intent – запуск другого Activity в своем приложении.
Слайд 25Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Activity представляет собой пользовательский интерфейс
для одного действия, которое пользователь может совершить. Например, приложение для
обмена текстовыми сообщениями может иметь одно Activity для отображения списка контактов, другое – для написания сообщения выбранному контакту, третье – для просмотра сообщений и еще одно для изменения настроек. Все эти Activities формируют единый пользовательский интерфейс, но не зависят друг от друга.
Приложение может состоять из одного Activity или из нескольких. Это зависит от типа приложения и его дизайна. Одно Activity может вызвать другое. Каждое Activity задает окно для отображения, которое, обычно, занимает весь экран, но может быть меньше и плавать поверх других окон. Activity может использовать дополнительные окна, например, всплывающий диалог, который требует промежуточного ответа пользователя, или окно, которое отображает пользователям важную информацию при выборе элемента, заслуживающего особого внимания.
Визуальный интерфейс строится на основе иерархии визуальных компонентов, производных от базового класса View. Android имеет ряд готовых к использованию компонентов, а также кнопки, текстовые поля, полосы прокрутки, меню, флажки и многие другие.
Слайд 26Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Activity может находиться в одном
из трех состояний:
- Active или Running – находится на переднем
плане и имеет фокус для взаимодействия с пользователем.
- Paused – потеряло фокус, но все еще видно пользователю. Сверху находится другое Activity, которое или прозрачно или закрывает не весь экран. Приостановленное Activity полностью "живое" (его состояние сохранено), но может быть уничтожено системой в случае нехватки памяти.
- Stopped – полностью перекрыто другим Activity. Оно больше не видно пользователю и будет уничтожено системой, когда понадобится память.
Если Activity приостановлено или остановлено, система может удалить его из памяти, либо послать запрос на его завершение, или просто уничтожить его процесс. Когда Activity снова отображается пользователю, его состояние полностью восстанавливается.
Переходя от состояния к состоянию, Activity уведомляет об этом, вызывая следующие методы:
void onCreate()
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
Слайд 27Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Жизненный цикл Activity состоит из
трех вложенных циклов:
- Жизненный цикл activity начинается с вызова метода
onCreate(), в котором производится первоначальная настройка глобального состояния, и завершается вызовом метода onDestroy(), в котором оно освобождает занятые ресурсы.
- Видимая часть жизненного цикла происходит между вызовами onStart() и onStop(). В течение этого времени пользователь может видеть Activity на экране, хотя оно может быть не на переднем плане и не взаимодействовать с пользователем. Методы onStart() и onStop() могут вызываться столько раз, сколько Activity становится видимым или скрытым для пользователя.
- На переднем плане Activity находится между вызовами onResume() и onPause(). В течение этого времени Activity находится поверх других и взаимодействует с пользователем. Activity может часто переходить в состояние паузы и выходить из него. Например, метод onPause() может быть вызван, когда устройство переходит в спящий режим или когда запускается другое Activity, а метод onResume() – при получении результата от закрывающегося Activity.
Слайд 28Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Слайд 29Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Рассмотрим более детально каждый из
уже перечисленных методов и его место в жизненном цикле Activity:
onCreate()
Вызывается один раз, при создании Activity. Здесь должна производиться первоначальная настройка – создание экземпляров класса View (пользовательский интерфейс), запись данных в списки и так далее. За ним всегда следует вызов метода onStart(). Не может быть уничтожен. Следующий метод - onStart()
onStart() Вызывается после того как Activity было остановлено и теперь снова запускается. За ним всегда следует вызов onResume() Не может быть уничтожен. Следующий метод - onResume()
onRestart() Вызывается перед тем как Activity становится видимым для пользователя. За ним следует вызов onResume(), если Activity переходит на передний план, или onStop(), если оно скрывается. Не может быть уничтожен. Следующий метод - onResume() или onStop()
onResume() Вызывается перед тем, как Activity начинает взаимодействовать с пользователем. С этого момента Activity находится на вершине стека и принимает весь пользовательский ввод. За ним следует вызов onPause().
Не может быть уничтожен. Следующий метод - onPause()
Слайд 30Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
onPause() Вызывается системой перед возобновлением
другого Activity. Этот метод обычно используется для сохранения измененных данных,
остановки анимации и других вещей, которые могут потреблять процессорное время. Другое Activity не будет возобновлено, пока он не завершится. За ним может быть вызван метод onResume() если Activity возвращается на передний план, или метод onStop(), если оно становится невидимым для пользователя.
Может быть уничтожен. Следующий метод - onResume() или
onStop()
onStop() Вызывается когда Activity больше не видно пользователю. Это может происходить потому, что оно уничтожается или потому, что другое Activity было возобновлено и перекрыло его. Затем может быть вызван либо метод onRestart(), если Activity возвращается для взаимодействия с пользователем, либо метод onDestroy(), если оно завершается. Может быть уничтожен. Следующий метод - onRestart() или onDestroy()
onDestroy() Вызывается перед уничтожением Activity. Это последний вызов, который оно получит. Может быть вызван либо потому, что Activity завершается (кто-то вызвал метод finish()), либо потому, что система временно уничтожает этот экземпляр для экономии памяти. Может быть уничтожен. Следующего метода нет.
Слайд 31Разработка приложений для ОС Android
Компоненты Android-приложения
Activities
Обратите внимание на вопрос "Может
ли быть уничтожен?". Он указывает на то, может ли система
уничтожить процесс, в котором запущено Activity, в любой момент после возврата из этого метода, не выполняя больше ни одной строчки кода Activity. Три метода: OnPause(), OnStop() и OnDestroy() – отмечены "Да". Но только метод OnPause() будет гарантированно вызван перед уничтожением процесса, поскольку он первый в этом списке, а OnStop() и OnDestroy() могут не вызываться. Поэтому для сохранения измененных данных нужно использовать метод OnPause(). Методы, отмеченные "Нет", защищают процесс, в котором запущено Activity, от уничтожения с момента их вызова.
Слайд 32Разработка приложений для ОС Android
Компоненты Android-приложения
Типы процессов в Android-приложении
Жизненный цикл
приложения тесно связан с жизненным циклом его процесса. Также он
зависит от текущего состояния системы. В случае нехватки памяти, Android убивает наименее значимые процессы. Значимость процесса зависит от его типа. Типы процессов, в зависимости от важности, выглядят следующим образом (от наиболее до наименее важных):
Процесс переднего плана – процесс приложения, с которым пользователь взаимодействует в данный момент. Процесс считается таковым, если его Activity находится на вершине Activity-стека (была вызвана функция onResume(), или его Broadcast Receiver работает в настоящее время (в данный момент исполняется приложением onReceive()), или же его Service выполняет callback-методы, такие как onCreate(), onStart() или onDestroy(). Как правило, таких процессов очень мало и они закрываются в самую последнюю очередь.
Видимый процесс — процесс, который имеет Activity, видимый конечному пользователю в данный момент времени. Процессов, которые выводятся на экран, очень мало, поэтому их работа прерывается только в крайнем случае, если не хватает ресурсов для активных приложений.
Служебный процесс – процесс, содержащий Service, для которого была вызвана функция startService(), при условии, что данный Service сейчас работает.
Процесс заднего фона. Данный процесс не имеет видимых пользователю Activity (была вызвана функция onStop()). Как правило, существует множество фоновых процессов, работа которых завершается по принципу "последний запущенный закрывается первым", чтобы освободить ресурсы для приложений, работающих на переднем плане.
Слайд 33Разработка приложений для ОС Android
Компоненты Android-приложения
Services
Service – это некий процесс,
который запускается в фоновом режиме. Как пример, Service может получать
данные по сети, выполнять какие-либо длительные вычисления. Хорошим примером Service служит проигрыватель музыки. Пользователь может выбрать любую песню в проигрывателе, включить ее и закрыть плеер занявшись чем-нибудь другим. Музыка будет проигрываться в фоновом процессе. Service проигрывания музыки будет работать, даже если Activity плеера закрыта.
Подобно Activity, Service имеет свои методы жизненного цикла:
- void onCreate()
- void onStart(Intent intent)
- void onDestroy()
В полном жизненном цикле Service существует два вложенных цикла:
- полная целая жизнь Service – промежуток между временем вызова метода onCreate() и временем возвращения onDestroy(). Подобно Activity, для Services производят начальную инициализацию в onCreate() и освобождают все остающиеся ресурсы в onDestroy();
- активная целая жизнь Service – начинается с вызова метода onStart(). Этому методу передается объект Intent, который передавался в startService().
Как и Activities, Services запускаются в главном потоке процесса приложения. По этой причине их следует запускать в отдельном потоке, чтобы они не блокировали другие компоненты или пользовательский интерфейс.
Слайд 34Разработка приложений для ОС Android
Компоненты Android-приложения
Broadcast receivers
Broadcast receiver – это
компонент, который ничего не делает, кроме того, что рассылает и
реагирует на широковещательные сообщения. Примером широковещательных компонентов могут быть: сообщения об переходе на летнее/зимнее время, сообщения об минимальном заряде батареи и так далее.
Broadcast receiver не отображает пользовательский интерфейс, но может запустить Activity на полученное сообщение или использовать NotificationManager для привлечения внимания пользователя. Привлечь внимание пользователя можно, например, вибрацией устройства, проигрыванием звука или миганием вспышки.
Приемник широковещательных сообщений имеет единственный метод жизненного цикла: onReceive(). Когда широковещательное сообщение прибывает для получателя, Android вызывает его методом onReceive() и передает в него объект Intent, содержащий сообщение. Приемник широковещательных сообщений является активным только во время выполнения этого метода. Процесс, который в настоящее время выполняет Broadcast receiver, является приоритетным процессом и будет сохранен, кроме случаев критического недостатка памяти в системе.
Когда программа возвращается из onReceive(), приемник становится неактивным и система полагает, что работа объекта Broadcast receiver закончена. Процесс с активным широковещательным получателем защищен от уничтожения системой. Однако процесс, содержащий неактивные компоненты, может быть уничтожен системой в любое время, когда память, которую он потребляет, будет необходима другим процессам.
Слайд 35Разработка приложений для ОС Android
Компоненты Android-приложения
Content providers
Content providers предоставляют доступ
к данным (чтение, добавление, обновление). Content provider может предоставлять доступ
к данным не только своему приложению, но и другим. Данные могут размещаться в файловой системе, в базе данных.
Виджеты
Виджет – это объект View, который служит интерфейсом для взаимодействия с пользователем. Иначе, виджеты – это обычные элементы управления: кнопки, текстовые поля, флажки, переключатели, списки.
Стандартные элементы имеют привычные свойства: ширина, высота, цвет и тому подобные. Еще два важных свойства, которые могут влиять на размер и положение дочерних элементов - важность (weight) и выравнивание (gravity). Weight используется для присвоения элементу показателя важности, отличающего его от других элементов, находящихся в контейнере. Предположим, в контейнере находится три элемента управления: первый имеет важность 1 (максимальное возможное значение), а два других имеют значение 0. В этом случае элемент управления, который имеет значение важности 1, займет в контейнере все свободное пространство. Gravity – это ориентация в контейнере. Например, необходимо выровнять текст надписи по правому краю, тогда свойство gravity будет иметь значение right. Набор значений для gravity ограничен: left, center, right, top, bottom, center_vertiсаl, сliр_horizontal и еще некоторые.
Слайд 36Разработка приложений для ОС Android
Виджеты
TextView
Виджет TextView предназначен для отображения текста
без возможности редактирования его пользователем. TextView один из самых используемых
виджетов. С его помощью пользователю удобнее ориентироваться в программе. По сути, TextView служит для представления пользователю описательного текста.
Атрибуты TextView:
- android:textsize – размер текста. При установке размера текста используются несколько единиц измерения: px (pixels), dp (density-independent pixels), sp (scale-independent pixels), in (inches), pt (points), mm (millimeters). Чтобы текст мог меняться в зависимости от выбора пользователя, используют единицы измерения sp.
- android:textstyle – стиль текста. Используются константы: normal, bold, italic.
- android:textcolor – цвет текста. Используются четыре формата в шестнадцатеричной кодировке: #RGB; #ARGB; #RRGGBB; #AARRGGBB, где R, G, B – соответствующий цвет, А – прозрачность (alpha-channel). Значение А, установленное в 0, означает прозрачность 100%.
Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor (цвет тени), shadowDx (смещение тени по горизонтали), shadowDy (смещение по вертикали) и shadowRadius (ширина тени). Во время установки значений изменения не видны, необходимо запустить пример в эмуляторе или на устройстве.
Слайд 37Разработка приложений для ОС Android
Виджеты
TextView
Рассмотрим частую ошибку при попытке изменить
фон элемента программным способом. Предположим, в ресурсах определен зеленый цвет:
name="tvBackground">#337700
Следующий код будет ошибочным:
tv.setBackgroundColor(R.color.tvBackground);
Нужно так (два варианта):
tv.setBackgroundResource(R.color.tvBackground); tv.setBackgroundColor(getResources().getColor(R.color.tvBackground));
Button
Кнопка – один из самых распространенных элементов управления в программировании. Наследуется от Textview и является базовым классом для класса СompoundButton. От класса CompoundButton, в свою очередь, наследуются такие элементы как CheckBox, ToggleButton и RadioButton. На кнопке располагается текст и на кнопку нужно нажать, чтобы получить результат.
Если вы разместили на экране кнопку и будете нажимать на нее, то ничего не произойдет. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку. Относительно новый и простой для начинающего программиста способ – использовать атрибут onClick.
Слайд 38Разработка приложений для ОС Android
Виджеты
Button
Иногда нужно сделать кнопку недоступной. Через
XML нельзя сделать кнопку недоступной (нет подходящего атрибута). Это можно
сделать программно через метод setEnable(). Как альтернативу можно рассмотреть атрибут android:clickable, который позволит кнопке не реагировать на касания, но при этом вид кнопки останется обычным.
Другие типы виджетов
CheckBox является флажком, с помощью которого пользователь может отметить (поставить галочку) определенную опцию. Очень часто флажки используются в настройках, когда нужно выборочно выбрать определенные пункты, необходимые для комфортной работы пользователю.
RadioButton. Главная особенность элемента RadioButton состоит в том, что он не используется в одиночестве. Всегда должно быть два и более переключателя и только один из них может быть выбранным.
ToggleButton по своей функциональности похож на флажок (checkbox) или переключатель (radiobutton). Это кнопка, которая может находиться в одном из двух состояний: активна (On) или неактивна (Off).
Switch – еще один вид переключателей, представляет собой полоску с двумя состояниями, переключиться между которыми можно сдвиганием ползунка.
Слайд 39Разработка приложений для ОС Android
Виджеты
Другие типы виджетов
Spinner похож на выпадающий
список. В закрытом состоянии элемент показывает одну строчку, при раскрытии
выводит список в виде диалогового окна с переключателями.
ProgressBar (индикатор прогресса) применяется в тех случаях, когда пользователю нужно показать, что программа не зависла, а выполняет продолжительную работу.
SeekBar – обычный слайдер, чтобы пользователь мог передвигать ползунок пальцем на экране. Также можно передвигать ползунок с помощью клавиш-стрелок.
RatingBar показывает значение рейтинга в виде звездочек. Можно установить рейтинг касанием пальца или с помощью клавиш курсора, используя заранее заданное количество звездочек.
Для виджета RatingBar используются следующие методы:
- setNumStart(int) – устанавливает число звездочек
- getRating() – возвращает значение рейтинга
- setRating(float) – устанавливает значение рейтинга
- setStepSize(float) – устанавливает шаг приращения рейтинга
Слайд 40Разработка приложений для ОС Android
Виджеты
Адаптеры
В Android часто используются адаптеры. Если
говорить в общих чертах, то адаптеры упрощают связывание данных с
элементом управления. Адаптеры используются при работе с виджетами: ListView, Spinner и другими.
ListAdapter наследует базовый класс Adapter и служит мостом между данными и ListView. Часто данные могут быть представлены курсорами, но необязательно. Удобство в том, что ListView может отображать любые данные, лишь бы они были завернуты в ListAdapter. ListAdapter имеет несколько подклассов (ArrayAdapter, BaseAdapter, CursorAdapter и другие), которые предназначены для различных целей.
ArrayAdapter специально предназначен для работы с элементами списка. Он представляет данные в виде массива и добавляет удобный функционал для работы с ними (добавление, удаление, поиск).
BaseAdapter – очень простой адаптер, обычно используется для заполнения списка статическими данными (которые могут быть взяты из ресурсов).
CursorAdapter предоставляет данные для списка через курсор.
Слайд 41Разработка приложений для ОС Android
Эмулятор
Эмулятор Android – это важный инструмент
разработчика. Необходимо изучить его особенности и использовать его на начальном
этапе разработки. Однако, следует помнить, что эмулятор лишь моделирует общее поведение реального устройства. Поэтому окончательное тестирование необходимо проводить на настоящем телефоне.
Эмулятор создается при помощи Android Virtual Device Manager (AVD Manager). Создавая новое виртуальное устройство, в окне свойств можно задать произвольное название для эмулятора, указать версию API и установить остальные параметры (например, разрешение, плотность пикселей на экране, емкость SD-карты и другие).
С помощью эмулятора можно иметь полноценный доступ к интернету, настраивать скорость и латентность соединения. Также можно имитировать входящие и исходящие телефонные звонки и SMS-сообщения. Но в то же время эмулятор не поддерживает виброзвонок, светодиоды, камеру, акселерометр и работу с компасом.
Теперь, когда известны основные принципы программирования для Android и создан эмулятор, можно приступать к написанию приложений, предварительно установив необходимое ПО.
Слайд 42Разработка приложений для ОС Android
Инструменты для разработки и их установка
Инструмент
разработчиков java: java SDK (oracle.com – downloads - java 4
developers – java SE (standart edition), выбираем последнюю версию (7u51 на момент создания этой презентации), принимаем лицензию, выбираем свою ОС и скачиваем файл установки (в моём случае это был файл jdk-7u51-windows-x64.exe) и устанавливаем).
Android SDK. Это, собственно, сам инструмент для разработки приложений под Android. http://developer.android.com/sdk/index.html - download the sdk (adt bundle for windows) большая кнопка, или для других ОС версии для скачиваний ниже. Скачиваем, устанавливаем. Далее ищем архив, разархивируем и нажимаем на SDK manager.exe. В открывшемся окне выбираем, что устанавливаем, и под какие именно версии ОС (версия API для той ОС, которая у вас установлена на телефоне, на котором вы будете тестировать приложения, но чаще всего это – 2.3.3, 2.2 и 2.1). Далее принимаем лицензионное соглашение и устанавливаем все выбранные компоненты. Бывает ситуация, когда установка не идёт. В таком случае мы нажимаем win+break, дополнительные параметры системы, переменные среды. Далее создаём переменную с именем java home и значением – путём к установленному jdk. Нажимаем ОК, закрываем, нажимаем далее в установщике Android SDK.
Слайд 43Разработка приложений для ОС Android
Инструменты для разработки и их установка
3.
В Android SDK Manager также входят средства для создания виртуальных
устройств – Tools – Manage AVDs (virtual device manager). Для того, чтобы делать приложение под несколько телефонов, или под наш (ваш) конкретный телефон, надо создать для начала такое устройство, нажав на кнопку New.
Слайд 44Разработка приложений для ОС Android
Опция snapshot позволяет загружать телефон с
предыдущего сохранённого состояния, а не загружать телефон каждый раз с
нуля. Выбрав все параметры, нажимаем ОК. И если всё не зависнет, то можно приступать к проверке появившегося в списке виртуального телефона, нажав на кнопку start. Если зависнет – пересмотрите введённые параметры (например, объём памяти, или съемной sd-карты, и т.д.).
После нажатия кнопки старт появится окно опций запуска.
Инструменты для разработки и их установка
Слайд 45Разработка приложений для ОС Android
После успешного создания устройства появится окно
типа такого:
Инструменты для разработки и их установка
Слайд 46Разработка приложений для ОС Android
После нажатия кнопки старт появится окно
опций запуска:
Scale display 2 real size позволяет уменьшить размер отображаемого
мобильника на экране монитора.
Wipe user data используется для зачистки телефона от ненужной информации, которая накопилась после долгого его использования.
Launch from snapshot запускает телефон не с нуля, а с последнего сохранённого состояния, в котором этот телефон был оставлен. Это экономит вам время.
Save 2 snapshot – после запуска телефона мы запоминаем его состояние, полезный checkbox.
Инструменты для разработки и их установка
Слайд 47Разработка приложений для ОС Android
Затем мы запускаем телефон кнопкой Launch,
и он начинает довольно долго грузиться. При этом окно с
эмулятором телефона недоступно =)
В конце концов через пару дней мы получаем вот такую картинку:
Дале можно посмотреть различные предустановленные приложения, и т.д. Функциональные кнопки телефона, к сожалению, расположены справа в кучке.
Инструменты для разработки и их установка
Слайд 48Разработка приложений для ОС Android
Когда вы вдоволь наиграетесь с эмулятором,
нужно его закрыть и приступить к установке среды, в которой,
собственно, и будут создаваться мобильные приложения.
4. Заходим на сайт eclipse.org, downloads, и выбираем Eclipse IDE for Java Developers. После скачивания просто перемещаем папку с системой в удобное место, установка не требуется. При этом чем короче путь к удобному месту, тем лучше (вложенность папок eclipse очень велика, из-за слишком длинного пути может возникнуть ошибка разархивирования).
Запускаем eclipse, выбираем место, где будут храниться все наши проекты (workspace).
Инструменты для разработки и их установка
Слайд 49Разработка приложений для ОС Android
Получаем окно eclipse:
Инструменты для разработки и
их установка
Слайд 50Разработка приложений для ОС Android
Переходим к рабочему виду (workbench):
Всё работает.
Закрываем.
Инструменты для разработки и их установка
Слайд 51Разработка приложений для ОС Android
5. Связываем eclipse и SDK. Для
этого надо установить ADT (android development tools) plugin. Возвращаемся на
сайт Android SDK, http://developer.android.com/sdk/index.html, выбираем Revisions, ADT plugin, справа – see also – Installing the Eclipse plugin. С полученной страницы копируем строчку https://dl-ssl.google.com/android/eclipse/ , возвращаемся в Eclipse, выбираем пункт меню Help – Install New Software…, в появившемся окне вводим скопированную строку и нажимаем Add, в появившемся окне в свободном поле вводим вместо имени – ADT.
После проверки обнаруживаются установленные компоненты Developer Tools и NDK Plugins, выделяем оба и нажимаем Next. Потом – снова Next, далее соглашаемся с лицензией и нажимаем Finish. Плагин ADT устанавливается. Потом запрашивается доверие к устанавливаемому приложению, нажимаем да, разрешаем доступ и перещапускаем Eclipse в ответ на запрос. Итак, у нас есть связка Eclipse и Android SDK, благодаря которой можно вызывать эмулируемое устройство прямо из среды Eclipse.
Инструменты для разработки и их установка
Слайд 52Разработка приложений для ОС Android
На этом установка ПО для создания
мобильных приложений завершена.
Инструменты для разработки и их установка