Метод onCleared
Метод onCleared класса
ViewModel
вызывается, когда модель больше не нужна:
закрыли экран или уничтожили scope.
Здесь отменяют корутины в
viewModelScope, закрывают каналы
и снимают слушатели.
Параметров у метода нет.
Синтаксис
override fun onCleared() {
super.onCleared()
}
Пример
Давайте сбросим Flow при очистке модели:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val model: TickViewModel = viewModel()
val text by model.text.collectAsState()
Text(text = text)
}
}
}
class TickViewModel : ViewModel() {
private val _text = MutableStateFlow("abcde")
val text = _text.asStateFlow()
private var job: Job? = null
init {
job = viewModelScope.launch {
delay(500)
_text.value = "12345"
}
}
override fun onCleared() {
job?.cancel()
super.onCleared()
}
}
На экране текст сменится на "12345",
а при уходе с экрана job отменят в onCleared.
Смотрите также
-
класс
ViewModel,
у которого объявлен onCleared -
функция
viewModel,
которая создаёт или находит модель -
класс
Lifecycle,
который управляет жизнью компонента -
функция
LaunchedEffect,
которая отменяется при уходе composable