#android
При работе с
coroutines мы частенько можем забыть отменить нужную нам джобу в тот момент, когда она нам больше не нужна. К счастью для нас, существует viewModelScope, который уничтожает ненужные coroutines в тот момент, когда уничтожается ViewModel.❓Давайте рассмотрим чуть детальнее, как он работает внутри.
Класс
ViewModel содержит внутри Map объектов, кототорые могут содержать любой тип объектов. Нам интересен метод
clear(), который вызывается перед методом onCleared() и который мы можем переопределить в нашей модели. Тут вызывается метод closeWithRuntimeException(), который как раз и завершает нужный нам Scope, так как он имплементирует интерфейс Closeable.Подобное поведение можно было довольно просто организовать и самостоятельно, однако пришлось бы сделать кастомный
Scope и завершить его в нужном нам месте. Разработчики Jetpack нам чуть-чуть упростили задачу.Ещё больше почитать о внутренней работе ViewModel можно тут.