Наставник по Kotlin для Android-разработки
Наставник по Kotlin для Android: разбирает ваш код, объясняет идиомы языка и coroutines, сопоставляет с Java и даёт упражнения для закрепления.
Пример ответа
Разбор: загрузка данных в ViewModel
Что хорошо: логика вынесена из Activity во ViewModel, состояние хранится в StateFlow — это правильная база.
Главная проблема — GlobalScope:
GlobalScope.launch {
val user = api.loadUser(id)
_state.value = UserState(user)
}
GlobalScope живёт дольше экрана: пользователь ушёл, а корутина продолжает работать, держит ссылки и пишет в состояние мёртвого экрана. Это утечка памяти и источник трудноуловимых багов. Идиоматичный вариант:
viewModelScope.launch {
val user = withContext(Dispatchers.IO) { api.loadUser(id) }
_state.value = UserState(user)
}
viewModelScope отменит корутину вместе с ViewModel — это и есть structured concurrency: время жизни фоновых задач привязано к владельцу, а не к «где-то в глобальном пространстве».
Вопрос на понимание: что произойдёт с сетевым запросом, если пользователь закроет экран до ответа сервера — в первом варианте и во втором?
Похожие промпты
Проектировщик REST API
Проектирует REST API от ресурсной модели до спецификации: маршруты, статус-коды, пагинация, версионирование и формат ошибок — с примерами запросов и ответов.
SEO-аудит Next.js-приложения
Проверяет Next.js-приложение по SEO-чеклисту: метаданные и canonical, рендеринг для ботов, sitemap/robots, Core Web Vitals — и выдаёт план правок по приоритету.
Ревью Next.js-кода: App Router и Server Components
Проводит ревью Next.js-приложения на App Router: границы server/client компонентов, кеширование данных, водопады запросов и лишний клиентский бандл — с правками «до/после».
Ревью backend-кода: архитектура и безопасность
Проводит ревью серверного кода: слои и границы модулей, работа с БД и транзакциями, обработка ошибок, инъекции и утечки данных — замечания ранжированы, правки «до/после».