Как я могу заставить ждать, пока мой объект дооснащения не будет инициализирован?
Сопрограммы здесь вам не помогут.Если до перехода к сопрограммам вы могли позволить себе блокировать основной поток пользовательского интерфейса во время инициализации Retrofit, оставьте его таким, и не включайте сопрограммы.
Если у вас была асинхронная задача, которая выполняла ее в фоновом режимето, какими бы ни были последствия позднего init, они также останутся с сопрограммами.
Единственное преимущество, которое сопрограммы дают вам, - это чистая модель программирования:
launch {
val httpClient = createOkHttpClient(...)
val gson = createGson()
retrofit = createRetrofit(httpClient.await(), gson.await())
... take the actions that depend on retrofit ...
}
Ваша сопрограмма будетвозобновить в потоке пользовательского интерфейса после инициализации httpClient
и gson
.Затем он может предпринять действия, которые заставят инициализацию вашего приложения продолжаться.Тем временем действие onCreate
завершено, поэтому вы должны переместить все имеющиеся у вас вещи, которые зависят от модернизации, в блок launch
.