Зачем нужны сайд-эффекты LaunchedEffect и DisposableEffect и как их использовать?

Зачем нужны сайд-эффекты (LaunchedEffect, DisposableEffect) и как их использовать? LaunchedEffect и DisposableEffect — основные API Jetpack Compose для управления сайд-эффектами.

Короткий ответ

Что ответить на собеседовании

Зачем нужны сайд-эффекты (LaunchedEffect, DisposableEffect) и как их использовать? LaunchedEffect и DisposableEffect — основные API Jetpack Compose для управления сайд-эффектами.

Подробный разбор

Ответ с пояснениями

Зачем нужны сайд-эффекты (LaunchedEffect, DisposableEffect) и как их использовать?

LaunchedEffect и DisposableEffect — основные API Jetpack Compose для управления сайд-эффектами.

  • LaunchedEffect: запускает корутину при создании ключа и автоматически отменяет её, если ключ изменился или композиция была уничтожена
  • применяется для запуска асинхронных операций, например загрузки данных или навигации

пример: получение данных при открытии экрана (fetchData внутри LaunchedEffect(key))

DisposableEffect: выполняется в соответствии с жизненным циклом композиции и позволяет организовать очистку и освобождение ресурсов

  • получает callback очистки, который вызывается при выходе из композиции либо при изменении ключа

пример: добавление и удаление слушателей, освобождение ресурсов, например отмена подписки

оба API связывают жизненный цикл эффектов с композицией, помогая избежать утечек и лишних вызовов

Итог: сайд-эффекты нужны для безопасного взаимодействия с внешним миром — асинхронными процессами и ресурсами — в декларативном UI на Compose.

Подробный ответ

Основной ответ

В Jetpack Compose сайд-эффекты, включая LaunchedEffect и DisposableEffect, применяются для управления действиями, выходящими за пределы обычного рендеринга UI и требующими выполнения кода с побочными эффектами. К таким действиям относятся запуск корутин, подписка на события и освобождение ресурсов. Эти API позволяют связывать Compose с асинхронными и внешними операциями, корректно учитывая состояние и recomposition.

LaunchedEffect запускает заданную корутину при первом вызове, а затем автоматически отменяет её при уничтожении composable или изменении ключа, что помогает предотвращать утечки.

DisposableEffect предназначен для выполнения действий при создании composable и очистки ресурсов при его удалении — например, для отписки от слушателей или остановки таймеров.

Ключевые моменты

  • LaunchedEffect подходит для асинхронных задач, которые нужно запустить при монтировании UI, например для загрузки данных или запуска анимации. Ключи определяют, потребуется ли повторный запуск после изменения параметров.
  • DisposableEffect используется, когда ресурс необходимо выделить при появлении composable и освободить при его исчезновении, например выполнить register/unregister BroadcastReceiver или listeners.
  • Оба API выполняются в контексте композиции и автоматически учитывают recomposition, благодаря чему предотвращаются дублирование действий и утечки.

Практический контекст

Например, в приложении с авторизацией, внутри LoginScreen:

  • LaunchedEffect(Unit) запускает проверку сессии или обращение к API при появлении экрана.
  • DisposableEffect после ухода со страницы может удалить подписку на push-уведомления или остановить таймер загрузки.

Это удобный и понятный способ управлять побочными эффектами в декларативном UI, сохраняя код чистым и упрощая его сопровождение.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку