Почему основной поток не блокируется, когда я использую viewModelScope.launch без диспетчера?Android

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

Сообщение Anonymous »


Итак, в ViewModel у меня есть функция, которая выполняет блокирующие и неблокирующие операции:

fun doSomethingInViewModelScope(){ viewModelScope.launch { неБлокингОдин() считать() неБлокингДва() } } весело Log.d("ViewModel", "Должно быть первым") } весело Log.d("ViewModel","Должно быть третьим") } приостановить счетчик веселья(){ вар долженCount = ложь индекс вар = 0 пока (!shouldCount){ задержка(1000) Log.d("ViewModel","Счетчик: $index") индекс +=1 долженCount = индекс == 5 } Log.d("ViewModel","Должно быть вторым") } До сих пор я думал, что если я запущу это, порядок журналов будет примерно таким:

Должен быть первым Должно быть третьим Счетчик: 0 Счетчик: 1 Счетчик: 2 . . . Должно быть вторым Или, по крайней мере, основной поток будет заблокирован, и я не смогу взаимодействовать с пользовательским интерфейсом.

После того, как я попробовал это, я был удивлен, потому что выполнение происходило последовательно:

Должен быть первым Счетчик: 0 Счетчик: 1 Счетчик: 2 . . . Должно быть вторым Должно быть третьим и счетчик в пользовательском интерфейсе не был заморожен, и я мог взаимодействовать с пользовательским интерфейсом.

Так почему же это происходит? Теоретически без определения диспетчера областью по умолчанию будет основная, если я выполняю какую-то тяжелую операцию в основном потоке, пользовательский интерфейс должен быть заморожен.

Еще одна вещь, которую я попробовал, если я установил новое значение для LiveData следующим образом: liveDdata.value = 10. Я не получил исключения по поводу этой операции, поскольку ее можно выполнить только в основном потоке.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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