Маршрут
- 1Lifecycle и Compose
- 2Корутины и данные
- 3Фон и JNI
- 4Трассы и KMP
| Этап | Что получится |
|---|---|
| Lifecycle и Compose | Восстанавливать состояние после уничтожения процесса |
| Корутины и данные | Проектировать отмену задач и offline-first данные |
| Фон и JNI | Выбирать платформенный механизм работы |
| Трассы и KMP | Измерять сценарии и выделять общую логику |
Нативная основа и Compose
Android Basics with Compose
системный официальный курс
Для человека с опытом программирования самый полезный участок — Units 4–7: архитектура и навигация, жизненный цикл, сеть и корутины, Room/DataStore, фоновая работа. Начальную часть можно проходить быстрее. Хорошая опора, чтобы понимать нативную сторону приложения и не воспринимать Android как просто место, куда устанавливается APK.
Now in Android
основной репозиторий для чтения современного Android-кода
Официальное приложение-образец на Kotlin/Compose с материалами об архитектуре, модульности и тестировании. Особенно полезно смотреть, как решения сочетаются в одном проекте. Но это учебный ориентир определённого масштаба: не стоит переносить всю его модульную структуру в приложение из двух экранов.
Activity Lifecycle + Saving UI States
восстановление приложения
Отличие изменения конфигурации от уничтожения процесса; что сохраняет ViewModel, что нужно восстановить отдельно, а что должно лежать в постоянном хранилище. Главный вопрос: что увидит пользователь, когда система убьёт процесс, а потом он вернётся? Это полезная проверка архитектуры независимо от выбранного UI-фреймворка.
Thinking in Compose + Compose Phases
механика декларативного UI
Рекомпозиция, повторное выполнение функций и стадии composition/layout/drawing. Материал полезен не только будущему Android-разработчику: сопоставьте его с Inside Flutter и QML bindings. Сходство идей помогает, но различия механизмов тоже важны — правила одного фреймворка нельзя автоматически переносить в другой.
Kotlin Coroutines Guide + Android Best Practices
асинхронность с жизненным циклом
Structured concurrency, cancellation, обработка ошибок, Flow, выбор scope и подмена dispatchers в тестах. Самое полезное — не синтаксис launch, а понимание владельца задачи: кто должен её отменить, где живёт результат и что происходит при закрытии экрана. Это хорошая пара к разделу про Dart concurrency.
Данные, фоновые задачи и JNI
Build an Offline-First App
один из лучших прикладных архитектурных разборов в подборке
Локальный источник данных, синхронизация, очереди записи, повторные попытки и разрешение конфликтов. Хотя примеры Android-специфичны, сами вопросы и принципы можно переносить на Flutter/Qt. Здесь объясняется не только «закэшируй ответ», а поведение приложения при нестабильной связи и расходящихся версиях данных.
Background Tasks
как выбирать механизм фоновой работы
Раздел помогает отличать обычную асинхронную работу от задач, для которых нужны платформенные механизмы вроде WorkManager или foreground service. Ни Dart isolate, ни QThread сами по себе не гарантируют выполнение после уничтожения процесса. Для загрузок, синхронизации и длительных операций это принципиально важнее выбора state manager.
JNI Tips
особенно полезно для Qt и собственного native-кода
JNIEnv и потоки, local/global references, исключения, строки и стоимость переходов между языками. Например, JNIEnv нельзя просто передавать между потоками как универсальный общий контекст. Очень плотный документ: помогает не только исправлять падения, но и проектировать более простой и дешёвый интерфейс между C++ и Java/Kotlin.
Производительность и общий код
Perfetto: Android Tracing
системный взгляд на производительность
Запись и анализ трасс Android: активность потоков, планирование и взаимосвязь событий. Особенно полезно, когда внутрифреймворковый профайлер показывает задержку, но не объясняет всю картину. Для SRE-подхода это естественный материал: смотреть, где реально потрачено время, а не объявлять медленной библиотеку по ощущениям.
Macrobenchmark + Baseline Profiles
измерять пользовательские сценарии
Старт приложения, прокрутка и воспроизводимые измерения; затем профили, помогающие ART заранее компилировать нужные пути. Важно разделять инструменты: Baseline Profiles относятся к коду, выполняемому ART, а не напрямую ускоряют Dart AOT или Qt/C++. Полезный материал для нативной части и понимания Android runtime.
Kotlin Multiplatform: официальный Android-раздел
другой способ разделять код между платформами
Брать для понимания shared-модулей, доступных библиотек и добавления общей логики в Android/iOS-проект. Важный архитектурный вопрос: что именно должно быть общим — данные и бизнес-логика или ещё и UI? Этот вариант лучше изучать после знакомства с Android, а не одновременно с первым Flutter-приложением.
Дальше
Вернитесь к карте направлений, чтобы выбрать следующий шаг.