Как я могу создавать многоразовые сопрограммы? ⇐ Android
-
Гость
Как я могу создавать многоразовые сопрограммы?
Мне хотелось бы узнать больше о Kotlin, поэтому я решил написать этот пост. Я не знаю, что мне сейчас делать со своим проектом.
Сценарий прост: у нас есть вызов API, SwipeRefreshLayout и LAZY сопрограмма.
Предположим, мы запустили LAZY coroutine, которая отвечает за запуск вызова API в ViewModel и наблюдение за ответом как MutableLiveData. Теперь, если пользователь обновит Layout и после некоторых действий потребуется выполнить еще один вызов API, считается ли хорошим подходом использовать для этого Job?
Как известно, сопрограммы нельзя использовать повторно, но мне удалось повторно запустить это конкретное Job.
Пример:
Private val someJob: Job get() = viewLifecycleOwner.lifecycleScope.launch(start = CoroutineStart.LAZY) { someViewModel.performApiCall() someViewModel.responseMLD.observe(viewLifecycleOwner, Observer { someObj -> когда (someObj) { это оболочка. Успех -> { //делать... } это оболочка. Ошибка -> { Лог.е( ЯРЛЫК, "что-то пошло не так" ) } } }) } .... myBind.refreshLayout.setOnRefreshListener { по умолчаниюViewsSetup() myBind.refreshLayout.isRefreshing = false }
Мне хотелось бы узнать больше о Kotlin, поэтому я решил написать этот пост. Я не знаю, что мне сейчас делать со своим проектом.
Сценарий прост: у нас есть вызов API, SwipeRefreshLayout и LAZY сопрограмма.
Предположим, мы запустили LAZY coroutine, которая отвечает за запуск вызова API в ViewModel и наблюдение за ответом как MutableLiveData. Теперь, если пользователь обновит Layout и после некоторых действий потребуется выполнить еще один вызов API, считается ли хорошим подходом использовать для этого Job?
Как известно, сопрограммы нельзя использовать повторно, но мне удалось повторно запустить это конкретное Job.
Пример:
Private val someJob: Job get() = viewLifecycleOwner.lifecycleScope.launch(start = CoroutineStart.LAZY) { someViewModel.performApiCall() someViewModel.responseMLD.observe(viewLifecycleOwner, Observer { someObj -> когда (someObj) { это оболочка. Успех -> { //делать... } это оболочка. Ошибка -> { Лог.е( ЯРЛЫК, "что-то пошло не так" ) } } }) } .... myBind.refreshLayout.setOnRefreshListener { по умолчаниюViewsSetup() myBind.refreshLayout.isRefreshing = false }
Мобильная версия