Загрузка данных
Хорошо, вот готовые устные ответы на все вопросы — коротко, по делу, так, чтобы можно было проговорить преподавателю вслух.
---
1. Определение мобильного приложения. Основные платформы мобильной разработки
Мобильное приложение — это программа, которая работает на смартфонах и планшетах, устанавливается через магазины приложений и использует возможности устройства: камера, GPS, датчики. Основные платформы — Android от Google (языки Kotlin, Java) и iOS от Apple (Swift, Objective-C). Есть ещё HarmonyOS, но он пока нишевый.
2. Нативные, веб, гибридные и кроссплатформенные приложения. Характеристика и области применения
Нативные пишутся под одну платформу на родном языке — максимальная производительность и доступ к железу, но дорого. Веб-приложения — это сайты, которые можно установить на экран, работают в браузере, к железу доступ ограничен. Гибридные — обёртка WebView с HTML/CSS/JS внутри, работают везде, но тормозят и плохо интегрируются. Кроссплатформенные — Flutter, React Native, Kotlin Multiplatform — один код под две платформы, производительность близка к нативной, хороши для стартапов и MVP.
3. Архитектура мобильного приложения. Основные компоненты
Архитектура нужна для удобства поддержки и тестирования. Основные компоненты: View — экран, ViewModel — хранит состояние и данные под повороты, Model — данные и бизнес-логика, Repository — единый источник правды (сеть, БД). Популярные паттерны: MVVM, MVI, Clean Architecture.
4. Инструментальные средства разработки Android-приложений. Назначение и возможности
Главное средство — Android Studio на базе IntelliJ. Она включает редактор кода, эмулятор, отладчик, профилировщик, сборщик Gradle, редактор разметки. Также есть SDK с adb и эмулятором, инструменты тестирования JUnit, Espresso, линтеры.
5. Жизненный цикл мобильного приложения
Этапы: установка, запуск (холодный, тёплый, горячий), активное использование, фон, остановка, обновление, удаление. На уровне Activity — отдельные методы: onCreate, onStart, onResume, onPause, onStop, onDestroy.
6. Переменные в Kotlin (val, var). Назначение и различия
val — неизменяемая ссылка, присвоить можно один раз (как final). var — изменяемая ссылка, можно переприсваивать. При этом сам объект у val может меняться, если это, например, список.
7. Типы данных в Kotlin. Классификация и примеры использования
Делятся на числовые: Byte, Short, Int, Long; с плавающей точкой: Float, Double; логический Boolean; символ Char; строка String. Есть массивы Array, коллекции List, Set, Map, а также Any — корень, Unit — аналог void, Nothing — для функций, которые никогда не возвращают значение. Nullable типы помечаются знаком вопроса.
8. Операторы в Kotlin. Основные виды и применение
Арифметические: + - * / %, присваивания: = += -=, сравнения: == != < >, логические: && || !, поразрядные: and or xor, оператор безопасного вызова ?., элвис ?:, диапазоны .. downTo until step.
9. Условные конструкции (if, when). Особенности использования
if — это выражение, возвращает значение, тернарного оператора нет. when — мощный аналог switch, может проверять диапазоны, типы, множественные значения, тоже может возвращать результат. Пример: when (x) { 0,1 -> ... in 2..10 -> ... is String -> ... }
10. Циклы в Kotlin (for, while). Назначение и различия
for используется для перебора диапазонов, коллекций, массивов. while повторяет пока условие истинно, do-while выполнится хотя бы один раз. Основное различие: for обычно для фиксированного количества итераций, while — когда условие зависит от внешних изменений.
11. Функции в Kotlin. Объявление и область видимости
Функция объявляется ключевым словом fun, указываются параметры и возвращаемый тип. Можно задавать значения по умолчанию, именованные аргументы. Область видимости: public (везде), internal (в модуле), private (в файле/классе), protected (в классе и подклассах). Есть функции-расширения, лямбды, функции верхнего уровня.
12. Массивы в Kotlin. Создание и работа с элементами
Массивы имеют фиксированный размер, элементы изменяемы. Создание: arrayOf(1,2,3), Array(5) { i -> i*i }, intArrayOf() для примитивов. Доступ по индексу: arr[0], свойство size, методы forEach, joinToString.
13. Классы и объекты в Kotlin. Основные принципы ООП
Класс — это шаблон, объект — экземпляр. Принципы ООП: инкапсуляция (скрытие данных), наследование (open class), полиморфизм (override), абстракция (абстрактные классы/интерфейсы). Особенности Kotlin: data class, object-синглтон, companion object для статических членов.
14. Наследование в Kotlin. Назначение и реализация
Наследование позволяет переиспользовать код и строить иерархии «является». По умолчанию классы final, нужно ставить open. Синтаксис: class Dog : Animal(). Для переопределения метода обязателен override, вызов родительского конструктора — сразу после двоеточия.
15. Интерфейсы в Kotlin. Особенности и применение
Интерфейс задаёт контракт. Может содержать абстрактные методы, методы с реализацией по умолчанию, абстрактные свойства (без поля). Класс может реализовать несколько интерфейсов. Применяются для множественного наследования поведения и для dependency injection.
16. Коллекции в Kotlin. Основные типы и назначение
Три основных типа: List — упорядоченный с дубликатами, Set — уникальные элементы без порядка, Map — пары ключ-значение. Каждый тип имеет изменяемую и неизменяемую версию: MutableList/List, MutableSet/Set, MutableMap/Map.
17. Изменяемые и неизменяемые коллекции. Отличия и применение
Неизменяемые (read-only) интерфейсы не имеют методов добавления/удаления, но могут ссылаться на реально изменяемую коллекцию. Истинно неизменяемые — из отдельной библиотеки, их нельзя изменить вообще. Рекомендация: возвращать наружу неизменяемые коллекции, внутри использовать изменяемые.
18. Работа со строками в Kotlin. Основные операции
Строки неизменяемы. Шаблоны строк: "$name". Многострочные строки в тройных кавычках. Доступ по индексу, длина length, сравнение == по содержимому. Методы: substring, split, replace, trim, toUpperCase, toIntOrNull и другие.
19. Исключения в Kotlin. Определение и назначение
Исключение — это событие, нарушающее нормальный ход выполнения программы: деление на ноль, ошибка ввода-вывода. В Kotlin все исключения unchecked, то есть не нужно писать throws. Назначение — отделить обработку ошибок от бизнес-логики.
20. Обработка исключений (try-catch). Принципы работы
Блок try — код, который может выбросить исключение. catch ловит определённый тип исключения, можно несколько. finally выполняется всегда. try может быть выражением, возвращающим значение. Принципы: не ловить всё подряд, логировать ошибки, не игнорировать, закрывать ресурсы в finally или через use.
21. Работа с файлами. Чтение и запись данных
Используются классы Java — File. Упрощённые функции: readText(), writeText(), appendText(). Для больших файлов — bufferedReader() и use { } для автоматического закрытия. В Android файлы хранятся в filesDir, cacheDir, нужны разрешения для внешнего хранилища.
22. Activity в Android. Назначение и роль в приложении
Activity — это экран приложения, окно. Она отвечает за отображение UI через setContentView, обработку событий, управление жизненным циклом и навигацию между экранами через Intent.
23. Жизненный цикл Activity. Основные методы и их назначение
Последовательность: onCreate — создание, onStart — стала видимой, onResume — получила фокус, onPause — частично перекрыта, onStop — полностью не видна, onRestart — перезапуск из stopped, onDestroy — уничтожение. Ещё onSaveInstanceState для сохранения состояния при повороте.
24. Метод onCreate(). Назначение и выполняемые действия
Вызывается один раз при создании Activity. Здесь нужно вызвать setContentView, найти View через findViewById или ViewBinding, инициализировать ViewModel, адаптеры, слушатели, восстановить сохранённое состояние из savedInstanceState.
25. XML-разметка в Android. Назначение и структура
XML используется для декларативного описания интерфейса, отделяя дизайн от кода. Корневой элемент — ViewGroup (LinearLayout, ConstraintLayout), внутри — View (TextView, Button). Атрибуты задают размеры, текст, идентификатор. Поддерживаются разные конфигурации (ориентация, язык).
26. Компоненты пользовательского интерфейса. Основные виды
Базовые View: TextView, EditText, Button, ImageView, CheckBox, ProgressBar. Контейнеры: LinearLayout, ConstraintLayout, FrameLayout, ScrollView. Продвинутые: RecyclerView, ViewPager2, WebView, Toolbar, BottomNavigationView.
27. Intent в Android. Назначение и типы
Intent — сообщение для запуска компонентов: Activity, Service, BroadcastReceiver. Бывает явный — указывает класс компонента, используется внутри приложения. И неявный — описывает действие (ACTION_VIEW) и данные, система сама подбирает подходящий компонент, например, открыть браузер.
28. Обработка пользовательских событий. Способы реализации
Самый частый способ — лямбда: button.setOnClickListener { ... }. Можно реализовать интерфейс в Activity и переопределить onClick. Раньше использовали атрибут onClick в XML, но это устарело. В Compose — декларативно: Button(onClick = {}) { Text() }.
29. RecyclerView. Назначение и особенности использования
RecyclerView — это компонент для эффективного отображения больших списков. Он переиспользует View, которые ушли за экран. Обязательно нужен LayoutManager (Linear, Grid), Adapter и ViewHolder. Поддерживает анимации, разделители, но клики нужно реализовывать вручную.
30. Adapter и ViewHolder. Роль в работе RecyclerView
Adapter связывает данные с RecyclerView. Он создаёт ViewHolder в onCreateViewHolder, связывает данные в onBindViewHolder и возвращает количество элементов. ViewHolder — это объект, который хранит ссылки на View одного элемента списка, чтобы не вызывать findViewById при каждом переиспользовании. Благодаря этому прокрутка работает плавно.
31. Fragment в Android. Назначение и отличие от Activity
Fragment — это модульный кусок интерфейса, который живёт внутри Activity. Он нужен для адаптивного дизайна (на телефоне один фрагмент, на планшете два), повторного использования и удобной навигации. Отличие от Activity: Fragment не может существовать сам, его жизненный цикл привязан к Activity, у него есть методы onCreateView, onViewCreated, onDestroyView.
32. SharedPreferences. Назначение и область применения
SharedPreferences — это хранилище пар ключ-значение для простых типов: строки, числа, булевы значения. Используется для настроек приложения, флага первого запуска, сохранения логина. Не подходит для больших объёмов или сложных структур. Современная альтернатива — DataStore.
33. Room. Назначение и преимущества по сравнению с SQLite
Room — библиотека-обёртка над SQLite от Jetpack. Преимущества: проверка SQL-запросов на этапе компиляции, меньше шаблонного кода, поддержка LiveData и Flow, автоматические миграции, возможность тестирования с in-memory БД. Компоненты: Entity — таблица, Dao — методы доступа, Database — абстрактный класс.
34. API. Определение и назначение
API — это интерфейс взаимодействия между программами. В мобильной разработке чаще всего имеется в виду Web API (REST, GraphQL) — обмен данными с сервером по HTTP в формате JSON. API позволяет отделить клиентскую часть от серверной и обновлять сервер без обновления приложения.
35. Асинхронность в Android. Основные подходы
Асинхронность нужна, чтобы не блокировать UI-поток долгими операциями (сеть, БД). Основные подходы: корутины Kotlin (рекомендованы) с suspend функциями и Dispatchers, RxJava (реактивные потоки), WorkManager для отложенных задач. Устаревшие: Thread + Handler, AsyncTask. LiveData и Flow помогают наблюдать за данными.
36. Тестирование мобильных приложений. Основные виды и методы
Виды: модульные тесты (JUnit, MockK) — тестируют отдельные функции; интеграционные — проверяют взаимодействие компонентов; UI-тесты (Espresso, Compose Test) — проверяют интерфейс. Также бывает функциональное, регрессионное, тестирование совместимости. Методы: ручное и автоматизированное тестирование, использование эмуляторов и реальных устройств.
37. Оптимизация мобильных приложений. Основные подходы
Для производительности: использовать RecyclerView, избегать утечек памяти, оптимизировать макеты (ConstraintLayout, ViewStub), профилировать в Android Studio. Для размера APK: использовать Android App Bundle, сжатие ресурсов, минификацию кода ProGuard/R8, изображения в WebP. Для энергопотребления: объединять запросы, использовать WorkManager, реже включать GPS. Для скорости запуска: отложить инициализацию, не делать тяжёлую работу в onCreate.