Async не ждет ожидания

Я новичок в Котлине и сопрограммах. Однако я хочу использовать его для инициализации библиотеки backport Android 3Ten, которая является долгосрочной задачей. Я использую библиотеку Metalab Async / Await ( co.metalab.asyncawait: asyncawait: 1.0.0 ).

Это мой код:

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val application = this async { //non-blocking initialize ThreeTen await { AndroidThreeTen.init(application) } //initialize UI on UI thread which uses the ThreeTen library initUI() } } 

Теперь у меня проблема с тем, что библиотека не инициализируется при инициализации пользовательского интерфейса. Из моего понимания initUI не следует вызывать до AndroidThreeTen.init .

Solutions Collecting From Web of "Async не ждет ожидания"

Короткий ответ заключается в том, что вам не следует использовать сопрограммы Kotlin для этого.

Долгий ответ заключается в том, что ваш код требует, чтобы AndroidThreeTen инициализировался до того, как вы инициализируете свой пользовательский интерфейс, поэтому вам нужно дождаться AndroidThreeTen.init прежде чем пытаться вызвать initUI любом случае. Из-за этой неотъемлемой необходимости ждать, нет никаких оснований для чрезмерного комкомкодирования кода. Корутины не волшебны. Они не будут ждать чего-то, что займет много времени как-нибудь быстрее. AndroidThreeTen.init будет принимать одинаковое количество времени с сопрограммами или без них.

Вы должны просто написать свой код следующим образом:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val application = this AndroidThreeTen.init(application) initUI() }