Программирование на Kotlin для Android

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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

Author(s): Пьер-Оливье Лоранс, Аманда Хинчман-Домингес, Дж. Блейк Мик, Майк Данн
Publisher: БХВ-Петербург
Year: 2024

Language: Russian
Pages: 336
City: СПб.
Tags: kotlin, mobile

Содержание
Об авторах
Предисловие
Кому адресована эта книга
Почему мы написали эту книгу
Как организована эта книга
Условные обозначения и соглашения
Примеры кода
Благодарности
ГЛАВА 1. Основы языка Kotlin
Система типов Kotlin
Примитивные типы
Null-безопасность
Тип Unit
Функциональные типы
Обобщенные типы
Переменные и функции
Переменные
Лямбда-выражения
Функции-расширения
Классы
Инициализация класса
Свойства
Модификатор lateinit
Свойства с отложенной инициализацией
Делегаты
Объекты-компаньоны
Классы данных
Классы перечислений
Запечатанные классы
Модификаторы видимости
Резюме
ГЛАВА 2. Фреймворк коллекций Kotlin
Основные понятия
Совместимость с Java
Изменяемость
Перегруженные операторы
Создание контейнеров
Функциональное программирование
Сравнение функционального и процедурного программирования: простой пример
Функциональное программирование в Android
Функции-преобразователи
Булевы функции
Фильтры
Функция тар
Функция flatMap
Группировка
Сравнение итераторов и последовательностей
Пример
Проблема
Реализация
Резюме
ГЛАВА 3. Основы Android
Стек Android
Аппаратное обеспечение
Ядро
Системные службы
Среда выполнения Android
Приложения
Прикладное окружение Android
Намерения и фильтры намерений
Контекст
Компоненты приложения Android: строительные блоки
Компонент Activity и его друзья
Службы
Провайдеры контента
BroadcastReceiver
Архитектуры приложений Android
MVC: основы
Виджеты
Локальная модель
Паттерны Android
Model-View-Intent
Model-View-Presenter
Model-View-ViewModel
Резюме
ГЛАВА 4. Параллельное программирование в Android
Потокобезопасность
Атомарность
Видимость
Модель многопоточного выполнения Android
Пропуск кадров
Утечка памяти
Инструменты для управления потоками
Looper/Handler
Исполнители Executors и объекты ExecutorService
Инструменты для управления заданиями
JobScheduler
WorkManager
Резюме
ГЛАВА 5. Потокобезопасность
Пример проблемы, связанной с потокобезопасностью
Инварианты
Мьютексы
Потокобезопасные коллекции
Привязка к потоку
Конфликт потоков
Сравнение блокирующего и неблокирующего вызовов
Очереди работ
Противодавление
Резюме
ГЛАВА 6. Организация параллелизма с использованием обратных вызовов
Пример: функция обработки покупок
Создание приложения
Компонент ViewModel
Представление
Реализация логики
Обсуждение
Ограничения модели многопоточного выполнения
Резюме
ГЛАВА 7. Сопрограммы
Что такое сопрограмма?
Наша первая сопрограмма
Функция async
Краткий обзор структурированного параллелизма
Связь "родитель — потомок" в структурированном параллелизме
CoroutineScope и CoroutineContext
Функции, поддерживающие возможность приостановки
Функции, поддерживающие возможность приостановки, ’’под капотом”
Использование сопрограмм и функций, поддерживающих возможность приостановки: практический пример
Не ошибитесь с модификатором suspend
Резюме
ГЛАВА 8. Структурированный параллелизм и сопрограммы
Функции, поддерживающие возможность приостановки
Настройка места действия
Традиционный подход с использованием java.util.concurrent.ExecutorService
Вспомним, что такое HandlerThread
Использование приостанавливаемых функций и сопрограмм
Сравнение приостанавливаемых и традиционной многопоточности: итоги
Отмена
Жизненный цикл сопрограмм
Отмена сопрограммы
Отмена задачи, делегированной сторонней библиотеке
Сопрограммы, которые действуют согласованно, чтобы их можно было отменить
Функцию delay() можно отменить
Обработка отмены
Причины отмены
Супервизия
Функция supervisorScope
Параллельная декомпозиция
Автоматическая отмена
Обработка исключений
Необработанные и открытые исключения
Открытые исключения
Необработанные исключения
Резюме
Размышления напоследок
ГЛАВА 9. Каналы
Обзор каналов
Рандеву-канал
Неограниченный канал
Объединенный канал
Буферизованный канал
Функция produce
Взаимодействующие последовательные процессы
Модель и архитектура
Первая реализация
Выражение select
Собираем все воедино
Мультиплексор и демультиплексор
Проверка производительности
Противодавление
Сходства с моделью акторов
Последовательное выполнение внутри процесса
Размышления напоследок
Взаимоблокировки в CSP
Каналы и взаимоблокировки
Ограничения каналов
«Горячие» каналы
Резюме
ГЛАВА 10. Потоки
Введение в потоки
Более реалистичный пример
Операторы
Терминальные операторы
Примеры использования холодного потока
Вариант 1: интерфейс с API на базе функции обратного вызова
Вариант 2: параллельное преобразование потока значений
Вариант 3: создание собственного оператора
Обработка ошибок
Блок try/catch
Разделение ответственности важно
Нарушение прозрачности исключения
Оператор catch
Материализация исключений
Горячие потоки и SharedFlow
Создаем Shared Flow
Регистрируем подписчика
Отправляем значения в SharedFlow
Использование SharedFlow для потоковой передачи данных
Использование SharedFlow в качестве шины событий
StateFlow. специализированная версия SharedFlow
Пример использования StateFlow
Резюме
ГЛАВА 11. Вопросы производительности и инструменты профилирования Android
Android Profiler
Network Profiler
CPU Profiler
Energy Profiler
Memory Profiler
Обнаружение утечек памяти с помощью LeakCanary
Резюме
ГЛАВА 12. Снижение потребления ресурсов за счет оптимизации производительности
Достижение плоской иерархии представлений с помощью ConstraintLayout
Сокращение количества операций рисования с помощью экземпляров класса Drawable
Минимизация данных в сетевых вызовах
Организация пула и кэширование объектов Bitmap
Избавляемся от ненужной работы
Использование статических функций
Минификация и обфускация с R8 и ProGuard
Резюме
Предметный указатель