Запускайте в lifecycleScope/viewModelScope, отменяйте при DESTROYED, не держите ссылки на View в долгоживущем scope.
Разбор
- ViewModel переживает конфиг — ок для state.
- Не передавайте Activity в GlobalScope.
repeatOnLifecycle для collect.
- Проверяйте LeakCanary на inner listeners.
Итог
Scope = lifecycle; иначе корутины держат UI в памяти.