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 завершении жизненного цикла?
Ответ #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 выполнять операции пользовательского интерфейса.
-
3
-
4
-
2
-
1
-
2
-
2
-
3
-
2
-
8
-
5
-
1
-
3
-
4
-
7
-
1
-
2
-
3
-
2
-
2
-
2
-
2
-
3
-
2
-
2
-
2
-
3
-
1
-
2
-
2
-
2
-
3
-
2
-
2
-
2
-
15
-
4
-
3
-
2
-
3
-
2
-
5
-
4
-
1
-
2
-
4
-
1
-
1
-
2
-
1
-
3