При запуске сопрограммы с помощью viewModelScope.launch { и установив точку останова внутри лямбды запуска, я заметил, что мое приложение больше не отвечает, поскольку оно все еще находилось в основном потоке.
Это меня смущает, потому что в документации viewModelScope.launch { четко указано:
Запускает новую сопрограмму без блокировки текущего потока
Разве текущая тема не является основной? Какова вся цель запуска, если по умолчанию он не запускается в другом потоке?
Мне удалось запустить его в другом потоке с помощью viewModelScope .launch(Dispatchers.IO){ который работает так, как я ожидал, а именно в другом потоке.
Чего я пытаюсь добиться при запуске< /code> заключается в вызове репозитория и выполнении некоторой работы по вводу-выводу, а именно вызове веб-сервиса и сохранении данных в базе данных комнаты. Поэтому я подумал о том, чтобы вызвать viewModelScope.launch(Dispatchers.IO){ , чтобы выполнить всю работу в другом потоке и в конце обновить результат LiveData.
< р>
Код: Выделить всё
viewModelScope.launch(Dispatchers.IO){
liveData.postValue(someRepository.someWork())
}Итак, мой второй вопрос: правильный ли это путь?
Подробнее здесь: https://stackoverflow.com/questions/621 ... by-default
Мобильная версия