Что такое DisposableEffect

«Что такое DisposableEffect» — вопрос из категории Jetpack Compose, который задают на 31% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DisposableEffect — это композейбл в Jetpack Compose, который выполняет side-эффекты и предоставляет механизм для их очистки. Он аналогичен useEffect в React, но с явным указанием ключей и cleanup-логики.

@Composable
fun TimerDisplay() {
    var time by remember { mutableStateOf(0) }

    DisposableEffect(Unit) {
        val timer = Timer()
        timer.scheduleAtFixedRate(object : TimerTask() {
            override fun run() {
                time++
            }
        }, 0, 1000)

        onDispose {
            timer.cancel() // Очистка при выходе из композиции
        }
    }

    Text(text = "Time: $time")
}

Ключевые особенности:

  1. Запускает эффект при входе в композицию
  2. Выполняет cleanup в onDispose при выходе или изменении ключей
  3. Перезапускает эффект при изменении переданных ключей (аналог зависимостей в useEffect)