Android. Программирование для профессионалов. 4-е издание - Билл Филлипс - E-Book

Android. Программирование для профессионалов. 4-е издание E-Book

Билл Филлипс

0,0
13,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Познакомьтесь с возможностями программирования Android на языке Kotlin! Множество примеров приложений с четкими объяснениями ключевых концепций и API позволят легко разобраться в самых трудных задачах. Эта книга посвящена прикладным методам разработки приложений на Kotlin, и подойдет для всех версий Android от 5.0 (Lollipop) до 8.1 (Oreo) и выше. Используйте Android Studio для создания приложений, чтобы проверять код на каждом этапе, интегрировать его с другими приложениями, работать с изображениями, воспроизводить аудио и делать многое другое. Каждая глава продумана (и протестирована) так, чтобы вы смогли получить максимум опыта и знания, необходимые для разработки под Android.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 615

Veröffentlichungsjahr: 2023

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Билл Филлипс, Крис Стюарт, Кристин Марсикано, Брайан Гарднер
Android. Программирование для профессионалов. 4-е издание

Переводчик С. Черников

Художник В. Мостипан

Корректоры М. Молчанова (Котова), Г. Шкатова

Билл Филлипс, Крис Стюарт, Кристин Марсикано, Брайан Гарднер

Android. Программирование для профессионалов. 4-е издание. — СПб.: Питер, 2020.

ISBN 978-5-4461-1657-7

© ООО Издательство "Питер", 2020

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

Оглавление

Благодарности
Изучение Android
Подготовка
Что нового в четвертом издании?
Как работать с книгой
Структура книги
Типографские соглашения
Версии Android
От издательства
Необходимые инструменты
Загрузка и установка Android Studio
Загрузка старых версий SDK
Аппаратное обеспечение
1. Первое Android-приложение
Основы разработки приложения
Создание проекта Android
Навигация в Android Studio
Создание макета пользовательского интерфейса
От разметки XML к объектам View
Разработка виджетов
Уведомления
Выполнение в эмуляторе
Для любознательных: процесс сборки Android-приложений
Упражнения
Упражнение. Настройка уведомления
2. Android и модель MVC
Создание нового класса
Архитектура «Модель — Представление — Контроллер» и Android
Обновление уровня представления
Обновление уровня контроллера
Добавление значка
Плотность пикселов
Запуск на устройстве
Упражнение. Добавление слушателя для TextView
Упражнение. Добавление кнопки возврата
Упражнение. От Button к ImageButton
3. Жизненный цикл activity
Поворот GeoQuiz
Обратные вызовы состояния и жизненного цикла activity
Регистрация событий жизненного цикла activity
Анализ жизненного цикла activity на примере
Конфигурации устройств и жизненный цикл ресурса
Для любознательных: обновление UI и мультиоконный режим
Для любознательных: уровни регистрации
Упражнение. Предотвращение ввода нескольких ответов
Упражнение. Вывод оценки
4. Сохранение состояния интерфейса
Добавление зависимостей ViewModel
Добавление ViewModel
Сохранение данных после завершения процесса
Сравнение ViewModel и сохраненного состояния экземпляра
Для любознательных: компоненты Jetpack, AndroidX и компоненты архитектуры
Для любознательных: как избежать костылей
5. Отладка Android-приложений
Исключения и трассировка стека
Особенности отладки Android
Упражнение. Исследуем Layout Inspector
Упражнение. Profiler
6. Вторая activity
Подготовка к внедрению второй activity
Запуск activity
Передача данных между activity
Ваши activity с точки зрения Android
Упражнение. Лазейка для читера
Упражнение. Отслеживание читов по вопросу
7. Версии Android SDK и совместимость
Версии Android SDK
Совместимость и программирование Android
Документация разработчика Android
Упражнение. Вывод версии Android на устройстве
Упражнение. Ограничение подсказок
8. UI-фрагменты и FragmentManager
Гибкость пользовательского интерфейса
Знакомство с фрагментами
Начало работы над CriminalIntent
Создание класса Crime
Создание UI-фрагмента
Хостинг UI-фрагментов
Архитектура приложений с фрагментами
9. Вывод списков и RecyclerView
Добавление нового фрагмента и ViewModel
Добавление RecyclerView
Создание макета представления элемента
Реализация ViewHolder
Реализация адаптера для заполнения RecyclerView
Переработка представлений
Очистка элементов связанного списка
Отклик на нажатия
Для любознательных: ListView и GridView
Упражнение. Типы View в RecyclerView
10. Создание интерфейсов с использованием макетов и виджетов
Знакомство с ConstraintLayout
Использование графического конструктора макетов
Использование ConstraintLayout
Подробнее об атрибутах макетов
Для любознательных: поля и отступы
Для любознательных: нововведения в ConstraintLayout
Упражнение. Форматирование даты
11. Базы данных и Room Library
Библиотека компонентов архитектуры Room
Создание базы данных
Определение объекта доступа к данным
Доступ к базе данных с помощью шаблона репозитория
Тестирование запросов
Потоки приложения
Использование LiveData
Упражнение. Ошибка доступа к схеме
Для любознательных: синглтоны
12. Навигация по фрагментам
Одиночная activity: главный фрагмент
Аргументы фрагментов
Преобразования LiveData
Обновление базы данных
Для любознательных: зачем использовать аргументы фрагментов?
Для любознательных: библиотека компонентов архитектуры навигации
Упражнение. Эффективная перезагрузка RecyclerView
13. Диалоговые окна
Создание экземпляра DialogFragment
Передача данных между фрагментами
Упражнение. Новые диалоговые окна
14. Панель приложения
Панель приложения AppCompat
Меню
Использование Android Asset Studio
Для любознательных: панель приложения/действий/инструментов
Для любознательных: доступ к AppCompat панели приложения
Упражнение. Пустое представление для списка
15. Неявные интенты
Добавление кнопок
Добавление подозреваемого в уровень модели
Форматные строки
Использование неявных интентов
Упражнение. Другой неявный интент
16. Интенты при работе с камерой
Размещение фотографий
Хранилище файлов
Использование интента камеры
Масштабирование и отображение растровых изображений
Объявление функциональности
Упражнение. Вывод увеличенного изображения
Упражнение. Эффективная загрузка миниатюры
17. Локализация
Локализация ресурсов
Конфигурационные квалификаторы
Тестирование альтернативных ресурсов
Для любознательных: подробнее об определении размеров экрана устройства
Упражнение. Локализация дат
18. Специальные возможности
Приложение TalkBack
Чтение нетекстовых элементов
Создание сопоставимого опыта взаимодействия
Для любознательных: Accessibility Scanner
Упражнение. Улучшение списка
Упражнение. Предоставление контекста для ввода данных
Упражнение. Оповещения о событиях
19. Привязка данных и MVVM
Другие архитектуры: зачем они нужны?
Сравнение моделей представления MVVM и Jetpack-класса ViewModel
Создание приложения BeatBox
Простая привязка данных
Импорт активов
Доступ к активам
Подключение активов для использования
Установление связи с данными
Для любознательных: подробнее о привязке данных
Для любознательных: LiveData и привязка данных
20. Модульное тестирование и воспроизведение звуков
Создание объекта SoundPool
Доступ к активам
Загрузка звуков
Воспроизведение звуков
Зависимости при тестировании
Создание класса теста
Подготовка теста
Написание тестов
Обратные вызовы привязки данных
Выгрузка звуков
Для любознательных: интеграционное тестирование
Для любознательных: фиктивные объекты и тестирование
Упражнение. Управление скоростью воспроизведения
Упражнение. Воспроизведение звуков после поворота
21. Стили и темы
Цветовые ресурсы
Стили
Темы
Добавление цветов в тему
Переопределение атрибутов темы
Изменение атрибутов кнопки
Для любознательных: подробнее о наследовании стилей
Для любознательных: доступ к атрибутам тем
22. Графические объекты
Унификация кнопок
Геометрические фигуры
Списки состояний
Списки слоев
Для любознательных: для чего нужны графические объекты XML
Для любознательных: Mipmap
Для любознательных: девятизонные изображения
Упражнение. Темы кнопок
23. Подробнее об интентах и задачах
Создание приложения NerdLauncher
Обработка неявного интента
Создание явных интентов на стадии выполнения
Задачи и стек возврата
Использование NerdLauncher в качестве главного экрана
Для любознательных: процессы и задачи
Для любознательных: параллельные документы
Упражнение. Значки
24. HTTP и фоновые задачи
Создание приложения PhotoGallery
Основы работы с сетью при помощи Retrofit
Получение JSON-данных от Flickr
Работа с сетью после изменения конфигурации
Отображение результатов в RecyclerView
Для любознательных: альтернативные парсеры и форматы данных
Для любознательных: отмена запросов
Для любознательных: управление зависимостями
Упражнение. Добавление пользовательского десериализатора Gson
Упражнение. Навигация по страницам
Упражнение. Динамическая настройка количества столбцов
25. Классы Looper, Handler и HandlerThread
Подготовка RecyclerView к выводу изображений
Подготовка к загрузке через URL
Множественные загрузки
Создание фонового потока
Сообщения и обработчики сообщений
Прослушивание жизненного цикла представления
Сохраненные фрагменты
Для любознательных: решение задачи загрузки изображений
Для любознательных: StrictMode
Упражнение. Наблюдение LiveData у LifecycleOwner
Упражнение. Больше информации о жизненном цикле ThumbnailDownloader
Упражнение. Предварительная загрузка и кэширование
26. Поиск: SearchView и SharedPreferences
Поиск во Flickr
Использование SearchView
Простое сохранение с помощью SharedPreferences
Последний штрих
Редактирование SharedPreferences с помощью Android KTX
Упражнение. Еще одно усовершенствование
27. Библиотека WorkManager
Создание класса Worker
Планирование работы
Проверка на наличие новых фотографий
Вывод уведомления пользователю
Управление опросом от пользователя
28. Широковещательные интенты
Обычные и широковещательные интенты
Отключение уведомлений при открытом приложении
Приемники и продолжительные задачи
Для любознательных: локальные события
Для любознательных: ограничения широковещательных приемников
Для любознательных: проверка видимости фрагмента
29. Веб-серфинг и WebView
И еще один фрагмент данных Flickr
Простой способ: неявные интенты
Сложный способ: WebView
Повороты в WebView
Сравнение WebView и пользовательского интерфейса
Для любознательных: внедрение объектов JavaScript
Для любознательных: обновления WebView
Упражнение. Пользовательские вкладки Chrome (еще один простой способ)
Упражнение. Использование кнопки «Назад» для работы с историей просмотра
30. Пользовательские представления и события касания
Создание проекта DragAndDraw
Создание пользовательского представления
Обработка событий касания
Рендеринг внутри onDraw(Canvas)
Для любознательных: GestureDetector
Упражнение. Сохранение состояния
Упражнение. Повороты прямоугольников
Упражнение. Поддержка специальных возможностей
31. Анимация свойств
Построение сцены
Простая анимация свойств
Одновременное воспроизведение анимаций
Для любознательных: другие API анимации
Упражнения
Послесловие
Последнее упражнение
Спасибо вам!
Рекомендуем прочитать

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

К. М.

Посвящается моей жене Карли за поддержку во всех начинаниях и за напоминание о том, что действительно важно.

Б. Г.

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

Б. Ф.

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

К. С.

Благодарности

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

• Спасибо Брайану Харди (Brian Hardy), которому вместе с Биллом Филлипсом (Bill Phillips) хватило смелости воплотить в реальность самое первое издание этой книги. Начав с нуля, Брайан и Билл сделали замечательный проект.

• Спасибо Эрику Максвеллу (Eric Maxwell), который в одиночку написал раздел «Для любознательных» о внедрении зависимостей, за улучшение информирования по нашим каналам, а также за исправление многочисленных замечаний редакторов на некоторых страницах этой книги.

• Спасибо Дэвиду Гринхалгу (David Greenhalgh) и Джошу Скину (Josh Skeen) за их бесценный опыт, пригодившийся нам, когда мы «котлинизировали» эту книгу и узнавали, как стать разработчиками Android в мире Kotlin.

• Спасибо Джереми Шерману (Jeremy Sherman) за его неожиданные познания в Android, пригодившиеся как раз тогда, когда это было нужно больше всего. Спасибо, Джереми, за ваши подробные и вдумчивые обзоры, а также за то, что позволили нам процитировать вас в одном из разделов.

• Спасибо Брайану Линдси (Bryan Lindsey), нашему эксперту по LiveData (и многим другим вопросам, связанным с Android). Спасибо за особое внимание, которое вы уделили приложениям BeatBox и PhotoGallery.

• Спасибо Эндрю Бейли (Andrew Bailey), лучшему воплощению интеллигенции на свете, за то, что много раз выслушивал и помогал нам принимать непростые концептуальные решения. Также спасибо за помощь в добавлении обновлений Oreo в нашу книгу.

• Спасибо Джейми Ли (Jamie Lee), нашему экстраординарному стажеру-разработчику-редактору. Спасибо за редактирование иллюстраций, обзор решений и внесение замечаний. Ваше внимание к деталям бесценно и уникально.

• Спасибо Эндрю Маршаллу (Andrew Marshall) за активное содействие в улучшении книги, за быстрое создание одного из наших классов, а также за быстрое включение в процесс и помощь в редактировании иллюстраций.

• Спасибо Заку Саймону (Zack Simon), нашему фантастически талантливому дизайнеру с вкрадчивым голосом, который украсил изящную шпаргалку, приложенную к этой книге. Если вам она понравится, вы должны найти Зака и сообщить ему об этом. А мы от себя поблагодарим Зака прямо здесь: спасибо, Зак!

• Спасибо нашему редактору Элизабет Холадей (Elizabeth Holaday). Легендарный битник Уильям Берроуз порой писал так: нарезал рукопись на фрагменты, подбрасывал в воздух и складывал их так, как они упали. Если бы не Элизабет, мы бы тоже скатились до таких методов, отчасти от путаницы, отчасти от простодушного воодушевления. Благодарим за то, что внесла в нашу работу точность и ясность и помогла сфокусироваться.

• Спасибо Элли Фолькхаузен (Ellie Volckhausen) за дизайн обложки этой книги.

• Анна Бентли (Anna Bentley) — наш замечательный редактор и корректор. Спасибо за то, что отшлифовали текст этой книги.

• Крис Лопер (Chris Loper) из IntelligentEnglish.com сверстал и подготовил печатную и электронную версии книги. Его инструментарий DocBook также существенно упростил нашу жизнь.

• Спасибо Аарону Хиллегасу (Aaron Hillegass), Стейси Генри (Stacy Henry) и Эмили Герман (Emily Herman). С практической точки зрения было бы невозможно проделать всю эту работу без Big Nerd Ranch, компании Аарона под бесстрашным руководством Стейси и Эмили в роли исполнительного и операционного директоров. Благодарим вас!

Остается лишь поблагодарить наших студентов. Между нами существует обратная связь: мы преподаем материал, они высказывают свое мнение. Без этой обратной связи книга не появилась бы на свет и не была бы переиздана. Если книги Big Nerd Ranch действительно отличаются от других (как мы надеемся), то именно благодаря этой обратной связи. Спасибо вам!

Изучение Android

Начинающему программисту Android предстоит основательно потрудиться. Изучать Android — все равно что жить в другой стране: даже если вы говорите на местном языке, на первых порах вы все равно не чувствуете себя как дома. Такое впечатление, что все окружающие понимают что-то такое, чего вы еще не усвоили. И даже то, что уже известно, в новом контексте оказывается попросту неправильным.

У Android существует определенная культура. Носители этой культуры общаются на Kotlin или Java (или сразу на обоих), но знать Kotlin или Java недостаточно. Чтобы понять Android, необходимо изучить много новых идей и приемов. Когда оказываешься в незнакомой местности, полезно иметь под рукой путеводитель.

Здесь на помощь приходим мы.

Мы, сотрудники Big Nerd Ranch, считаем, что каждый программист Android должен:

• писать приложения для Android;

• понимать, что он пишет.

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

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

Подготовка

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

Без знания этих концепций вы почувствуете себя в джунглях начиная со второй страницы. Лучше начните с вводного учебника по Kotlin и вернитесь к этой книге после его прочтения. Сегодня существует много превосходных книг для начинающих; подберите нужный вариант в зависимости от своего опыта программирования и стиля обучения. Мы рекомендуем книгу Kotlin Programming: The Big Nerd Ranch Guide1.

Если вы хорошо разбираетесь в концепциях объектно-ориентированного программирования, но успели малость подзабыть Kotlin, скорее всего, все будет нормально. Мы приводим краткие напоминания о некоторых специфических возможностях Kotlin (таких как интерфейсы и анонимные внутренние классы). Держите учебник по Kotlin наготове на случай, если вам понадобится дополнительная информация во время чтения.

Что нового в четвертом издании?

В этом издании мы провели капитальный ремонт и изменили буквально каждую главу. Самое большое изменение заключается в том, что программы теперь написаны на Kotlin, а не на Java. Поэтому неофициальным рабочим названием этого издания было «Android 4K».

Еще одно радикальное изменение — включение библиотек компонентов Android Jetpack. Теперь мы используем Jetpack-библиотеки (их еще называют AndroidX) вместо Support Library. Кроме того, мы включили новые API Jetpack, где это было уместно. Например, мы используем ViewModel для сохранения состояния пользовательского интерфейса при вращении. Мы используем Room и LiveData для реализации базы данных и запросов данных из нее. А для планирования фоновой работы мы используем WorkManager. И это лишь часть нововведений. В этой книге компоненты Jetpack в той или иной мере вплетены во все проекты.

Чтобы сфокусироваться на том, как разрабатываются современные приложения для Android, в этой книге используются библиотеки сторонних разработчиков, а не только API в пределах данного фреймворка или Jetpack. Один из примеров — отказ от HttpURLConnection и других сетевых API нижнего уровня в пользу использования Retrofit и его зависимых библиотек. Мы тем самым сильно отходим от наших предыдущих книг, но считаем, что такой подход подготовит вас к погружению в профессиональную разработку приложений после прочтения нашей книги. Выбранные библиотеки мы используем в повседневной жизни, разрабатывая приложения на Android для наших клиентов.

Kotlin vs Java

Официальная поддержка языка Kotlin для разработки под Android была объявлена на Google I/O в 2017 году. До этого существовало небольшое движение разработчиков Android, использующих Kotlin, несмотря на отсутствие официальной поддержки. С 2017 года Kotlin получил широкое распространение, и сегодня это наиболее предпочтительный язык для разработчиков на Android. Мы в Big Nerd Ranch используем Kotlin во всех наших проектах по разработке приложений, даже для старых проектов, которые в основном написаны на Java.

Взлеты и падения Kotlin весьма заметны. Команда разработчиков фреймворка Android начала добавлять в код старой платформы аннотации @nullable. Они также выпускают все больше и больше расширений Kotlin для Android. На момент написания этого абзаца Google уже добавляет примеры Kotlin в официальную документацию Android.

Фреймворк Android был первоначально написан на Java. Это означает, что большинство классов Android, с которыми вы взаимодействуете, — это классы Java. К счастью, Kotlin совместим с Java, поэтому проблем с этим не возникнет.

Листинги API мы тоже приводим на Kotlin, даже если внутри они реализованы на Java. Вы можете посмотреть листинги Java API, найдя интересующий вас класс на странице developer.android.com/reference.

Будь вы фанат Kotlin или Java, эта книга научит вас, как писать приложения для Android. Знания и опыт, полученные при разработке приложений для платформы Android, отлично транслируются на любой язык.

Как работать с книгой

Эта книга не справочник. Мы старались помочь в преодолении начального барьера, чтобы вы могли извлечь максимум пользы из существующих справочников и пособий. Книга основана на материалах пятидневного учебного курса в Big Nerd Ranch. Соответственно предполагается, что вы будете читать ее с самого начала. Каждая глава базируется на предшествующем материале, и пропускать главы не рекомендуется.

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

Желательно, чтобы ваша учебная среда была похожа на нашу. В частности, стоит хорошенько высыпаться и найти спокойное место для работы. Следующие факторы тоже сыграют положительную роль:

• Создайте учебную группу с друзьями или коллегами.

• Выделяйте время, когда вы будете заниматься исключительно чтением книги.

• Примите участие в работе форума книги на сайте forums.bignerdranch.com.

• Найдите специалиста по Android, который поможет вам в трудный момент.

Структура книги

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

GeoQuiz

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

CriminalIntent

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

BeatBox

Наведите ужас на своих врагов и узнайте больше о фрагментах, воспроизведении мультимедийного контента, архитектуре MVVM, связывании данных, тестировании, темах и графических объектах.

NerdLauncher

Нестандартный лаунчер раскроет тонкости работы системы интентов, процессов и задач.

PhotoGallery

Клиент Flickr для загрузки и отображения фотографий из общедоступной базы Flickr. Приложение демонстрирует работу со службами, многопоточное программирование, обращения к веб-службам и т.д.

DragAndDraw

В этом простом графическом приложении рассматривается обработка событий касания и создание нестандартных представлений.

Sunset

В этом крохотном приложении вы создадите красивое представление заката над водой, а заодно освоите тонкости анимации.

Упражнения

Многие главы завершаются разделом с упражнениями. Это ваша возможность применить полученные знания, покопаться в документации и отработать навыки самостоятельного решения задач.

Мы настоятельно рекомендуем выполнять упражнения. Сойдя с проторенного пути и найдя собственный способ, вы закрепите учебный материал и приобретете уверенность в работе над собственными проектами.

Если же окажетесь в тупике, вы всегда сможете обратиться за помощью на форум forums.bignerdranch.com.

А вы любознательны?

В конце многих глав также имеется раздел «Для любознательных». В нем приводятся углубленные объяснения или дополнительная информация по темам, представленным в главах. Содержимое этих разделов читать необязательно, но мы надеемся, что оно покажется вам интересным и полезным.

Типографские соглашения

Все листинги с кодом и разметкой XML напечатаны моноширинным шрифтом. Код или разметка XML, которые вы должны ввести, выделяются жирным шрифтом. Код или разметка XML, которые нужно удалить, зачеркиваются. Например, в следующей реализации функции вызов Toast.makeText(...).show() удаляется, а вместо него добавляется вызов checkAnswer(true).

trueButton.setOnClickListener { view: View ->

Toast.makeText(

this,

R.string.correct_toast,

Toast.LENGTH_SHORT

)

.show()

checkAnswer(true)

}

Версии Android

Мы будем говорить о версиях Android, широко используемых на момент написания книги. Для данного издания это версии Android 5.0 (Lollipop, API уровня 21) — Android 9.0 (Pie, API уровня 28). Несмотря на то что более старые версии все еще используются, нам кажется, что усилия, требуемые для поддержки этих версий, того не стоят.

Если вы хотите получить информацию о поддержке версий Android ранее 5.0, вы можете почитать предыдущие издания этой книги. Третье издание было нацелено на Android 4.4 и выше, второе — на Android 4.1 и выше, а первое — на Android 2.3 и выше.

Даже после выхода новых версий Android приемы, изложенные в книге, будут работать благодаря политике обратной совместимости Android (подробности см. в главе 7). На сайте forums.bignerdranch.com будет публиковаться информация об изменениях, а также комментарии по поводу использования материала книги с последними версиями.

От издательства

Если вам понравилась книга, ознакомьтесь с другими книгами издательства «Питер» по адресу www.piter.com. На веб-сайте издательства вы найдете подробную информацию о наших книгах.

Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

1 Скин Джош, Гринхол Дэвид. Kotlin. Программирование для профессионалов. — СПб.: Питер, 2020. — 464 с.: ил. — Примеч. ред.

Необходимые инструменты

Прежде всего вам понадобится Android Studio — интегрированная среда разработки для Android-программирования, созданная на базе популярной среды IntelliJ IDEA.

Установка Android Studio включает в себя:

Android SDK

последнюю версию Android SDK.

Инструменты и платформенные средства Android SDK

средства отладки и тестирования приложений.

Образ системы для эмулятора Android,

который позволяет создавать и тестировать приложения на различных виртуальных устройствах.

На момент написания книги среда Android Studio находилась в активной разработке и часто обновлялась. Учтите, что ваша версия Android Studio может отличаться от описанной в книге. За информацией об отличиях обращайтесь на сайт forums.bignerdranch.com.

Загрузка и установка Android Studio

Пакет Android Studio доступен на сайте разработчиков Android по адресу developer.android.com/studio.

Возможно, вам также придется установить пакет Java Development Kit (JDK8), если он еще не установлен в вашей системе; его можно загрузить на сайте www.oracle.com.

Если у вас все равно остаются проблемы, обратитесь по адресу developer.android.com/studio за дополнительной информацией.

Загрузка старых версий SDK

Android Studio предоставляет SDK и образ эмулируемой системы для последней платформы. Однако не исключено, что вы захотите протестировать свои приложения в более ранних версиях Android.

Компоненты любой платформы можно получить при помощи инструмента Android SDK Manager. В Android Studio выполните команду Tools⇒SDKManager. (Меню Tools отображается только при наличии открытого проекта. Если вы еще не создали проект, SDK Manager также можно вызвать из окна AndroidWelcome; в разделе QuickStart выберите вариант Configure⇒SDKManager, как показано на рис. 1.)

Рис. 1. Android SDK Manager

Выберите и установите каждую версию Android, которая будет использоваться при тестировании. Учтите, что загрузка этих компонентов может потребовать времени.

Android SDK Manager также используется для загрузки новейших выпусков Android — например, новой платформы или обновленных версий инструментов.

Аппаратное обеспечение

Эмулятор удобен для тестирования приложений. Тем не менее он не заменит реальное устройство на базе Android для оценки быстродействия. Если у вас имеется физическое устройство, мы рекомендуем время от времени использовать его в ходе работы с книгой.

2. Android и модель MVC

В этой главе мы обновим приложение GeoQuiz и включим в него дополнительные вопросы (рис. 2.1).

Рис. 2.1. Больше вопросов!

Для этого в проект GeoQuiz будет добавлен класс Question. Экземпляр этого класса инкапсулирует один вопрос с ответом «да/нет».

Затем мы создадим группу объектов Question, с которым будет работать класс MainActivity.

Создание нового класса

На панели Project щелкните правой кнопкой мыши по пакету com.bignerdranch.android.geoquiz и выберите команду New⇒KotlinFile/Class в контекстном меню. Введите имя класса Question, выберите пункт Class в раскрывающемся списке Kind и нажмите кнопку OK (рис. 2.2).

Рис. 2.2. Создание класса Question

Android Studio создаст файл Question.kt. Добавьте в этот файл две переменные и конструктор.

Листинг 2.1. Добавление класса Question (Question.kt)

class Question {

}

data class Question(@StringRes val textResId: Int, val answer: Boolean)

Класс Question содержит два вида данных: текст вопроса и правильный ответ (да/нет).

Аннотация @StringRes не обязательна, но мы рекомендуем включить ее по двум причинам. Во-первых, аннотация помогает встроенному в Android Studio инспектору кода (под названием Lint) проверить во время компиляции, что в конструкторе используется правильный строковый идентификатор ресурса. Это предотвращает сбои во время выполнения, когда конструктор используется с недействительным идентификатором ресурса (например, если идентификатор указывает не на строку). Во-вторых, аннотация делает ваш код более читаемым для других разработчиков.

Почему textResId — это Int, а не String? Потому что переменная textResId содержит идентификатор (всегда Int) строкового ресурса.

Мы используем ключевое слово data для всех классов моделей в этой книге. Тем самым мы намекаем на то, что класс предназначен для хранения данных. Кроме того, с такими классами компилятор работает дополнительно, например, автоматически определяет такие полезные функции, как equals(), hashCode(), и вводит красивое форматирование через toString().

Класс Question готов. Через некоторое время мы изменим MainActivity для работы с функцией Question. Но сначала давайте посмотрим, как будут вместе работать кусочки GeoQuiz.

Класс MainActivity должен создать список объектов Question. В процессе работы он взаимодействует с TextView и тремя виджетами Button для вывода вопросов и предоставления обратной связи на ответы пользователя. Отношения между этими объектами изображены на рис. 2.3.

Рис. 2.3. Диаграмма объектов GeoQuiz

Архитектура «Модель — Представление — Контроллер» и Android

Вероятно, вы заметили, что объекты на рис. 2.3 разделены на три области: «Модель», «Контроллер» и «Представление». Android-приложения строятся на базе архитектуры, называемой «Модель — Представление — Контроллер», или сокращенно MVC (Model-View-Controller). Согласно канонам MVC, каждый объект приложения должен быть объектом модели, объектом представления или объектом контроллера.

• Объект модели содержит данные приложения и «бизнес-логику». Классы модели обычно проектируются для моделирования сущностей, с которыми имеет дело приложение: пользователь, продукт в магазине, фотография на сервере, вопрос «да/нет» и т.д. Объекты модели ничего не знают о пользовательском интерфейсе; их единственная цель — хранение и управление данными.

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

Уровень модели GeoQuiz состоит из класса Question.

• Объекты представлений умеют отображать себя на экране и реагировать на ввод пользователя, например касания. Простейшее правило: если вы видите что-то на экране, значит, это представление.

Android дает широкий набор настраиваемых классов представлений. Разработчик также может создавать собственные классы представлений. Объекты представления в приложении образуют уровень представления.

В GeoQuiz уровень представления состоит из виджетов, заполненных по содержимому файла res/layout/activity_main.xml.

• Объекты контроллеров связывают объекты представления и модели; они содержат «логику приложения». Контроллеры реагируют на различные события, инициируемые объектами представлений, и управляют потоками данных между объектами модели и уровнем представления.

В Android контроллер обычно представляется подклассом Activity или Fragment. (Фрагменты рассматриваются в главе 8.)

Уровень контроллера GeoQuiz в настоящее время состоит только из класса MainActivity.

На рис. 2.4 показана логика передачи управления между объектами в ответ на пользовательское событие, такое как нажатие кнопки. Обратите внимание: объекты модели и представления не взаимодействуют друг с другом напрямую; в любом взаимодействии участвуют «посредники» — контроллеры, получающие сообщения от одних объектов и передающие инструкции другим.

Преимущества MVC

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

Рис. 2.4. Взаимодействия MVC при получении ввода от пользователя

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

Приложение GeoQuiz нельзя назвать сложным, но преимущества разделения уровней видны и здесь. Вскоре мы обновим уровень представления GeoQuiz и добавим в него кнопку NEXT. При этом нам совершенно не нужно помнить о только что созданном классе Question.