lifecycleScope.launch против сопрограммы внутри onViewCreated

В этом примере кода:

class MyFragment: Fragment { init { lifecycleScope.launch { whenStarted { } } } } 

код внутри whenStarted 9X_android-sdk запускается только при запуске жизненного 9X_android-sdk цикла фрагмента. Мне непонятно, что именно 9X_android-api это делает вместо того, чтобы просто запускать 9X_android-sdk сопрограмму внутри onViewCreated. В документах 9X_android-framework говорится:

Если жизненный цикл уничтожен, пока 9X_android-application сопрограмма активна через одну из Когда 9X_android-application методы, сопрограмма автоматически отменяется.

Это 9X_android-ui единственная причина, по которой вы должны 9X_android-framework использовать lifecycleScope.launch? Чтобы 9X_android-ui сопрограмма автоматически завершалась при 9X_android-framework завершении жизненного цикла?

8
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: lifecycleScope.launch против сопрограммы внутри onViewCreated

lifecycleScope - это область, которой управляет SupervisorJob, жизненный 9X_kotlinx.coroutines цикл которого привязан к жизненному циклу 9X_android-framework Fragment. Таким образом, просто используя lifecycleScope, ваши 9X_kotlin-coroutines-flow сопрограммы будут отменены, когда будет 9X_android уничтожен базовый экземпляр Lifecycle (LifecycleRegistry Fragment в данном 9X_android-application случае).

Я считаю, что lifecycleScope.launch { whenStarted {}} - более подробная 9X_android-api форма lifecycleScope.launchWhenStarted {}. Как и следовало ожидать, лямбда, переданная 9X_android-coroutine в launchWhenStarted, будет приостановлена ​​до тех пор, пока 9X_android-sdk Fragment не перейдет в начальное состояние.

Это единственная 9X_kotlinx.coroutines причина, по которой вы должны использовать 9X_android lifecycleScope.launch? К автоматическое 9X_android-sdk завершение сопрограммы, если жизненный цикл прекращено?

Отмена 9X_android-sdk - одно из преимуществ. Еще одно преимущество 9X_android-api заключается в том, что lifecycleScope.launch по умолчанию использует 9X_android-ui MainDispatcher (в отличие от других построителей, которые 9X_android-api по умолчанию используют Dispatches.Default), поэтому это гарантирует, что 9X_kotlinx.coroutines сопрограммы, запущенные с его помощью, могут 9X_kotlin-coroutines-flow выполнять операции пользовательского интерфейса.

12
0