В вашем случае вам не нужно использовать GlobalScope
в качестве сопрограммного контекста (вы можете, но это не рекомендуется согласно документам).Вам нужна локальная область действия:
private var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
@Override
public void onDestroy() {
super.onDestroy();
job.cancel()
}
Также ваш фрагмент должен реализовывать CoroutineScope
, а для использования Dispatchers.Main
в Android добавить зависимость к build.gradle приложения:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1'
Кодждать окончания сопрограммы:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
launch {
val operation = async(Dispatchers.IO) {
settingsInteractor.getStationSearchCountry().let {
countryName = it.name
}
settingsInteractor.getStationSearchRegion().let {
regionName = it.name
}
}
operation.await() // wait for result of I/O operation without blocking the main thread
// update views
country.updateCaption(countryName)
region.updateCaption(regionName)
}
}