Лучше определить переменную для CoroutineScope и повторно использовать ее или лучше вызывать CoroutineScope повторно?

#android #kotlin #kotlin-coroutines

#Android #kotlin #kotlin-сопрограммы

Вопрос:

Какова наилучшая практика использования CoroutineScope (MainScope в Android)? Ниже приведен пример, который определяет область видимости как переменную, которую можно использовать повторно, это позволяет мне выполнять все задания, выполняемые в области видимости, когда я выхожу из действия.

 val mainScope = MainScope()


// do something scope

mainScope.launch { ... }

mainScope.launch { ... }

mainScope.launch { ... }

mainScope.cancel()

 

Или этот подход, когда я просто вызываю MainScope , а затем выполняю работу, которую я хочу в этой области.

 
MainScope().launch { ... }

MainScope().launch { ... }

MainScope().launch { ... }
 

Ответ №1:

Ваши примеры не так уж сильно отличаются. При повторном использовании одной области у вас есть возможность отменить их все (когда они взаимодействуют).

Когда вы создаете новые области, вам нужно сохранить все Job , чтобы отменить их. И пока ваши области имеют точно такую же конфигурацию (как в вашем примере) Я не вижу смысла каждый раз создавать новые области.

LifecycleScope

Рассмотрите возможность использования lifecycleScope, когда вы находитесь в Activity или Fragment (в основном, в любом LifecycleOwner).

Эта область будет отменена при уничтожении жизненного цикла.

Комментарии:

1. И используйте встроенное свойство viewModelScope в классе ViewModel.