Почему viewModelScope.launch по умолчанию запускается в основном потокеAndroid

Форум для тех, кто программирует под Android
Anonymous
Почему viewModelScope.launch по умолчанию запускается в основном потоке

Сообщение Anonymous »

Пока я изучал сопрограммы и способы их правильного использования в приложении для Android, я обнаружил кое-что, что меня удивило.

При запуске сопрограммы с помощью 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

Вернуться в «Android»