异步不等待等待

我是Kotlin和协程的新手。 但是我想用它来初始化Android ThreeTen backport库,这是一个长期运行的任务。 我正在使用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() } } 

现在我有初始化UI时库没有初始化的问题。 从我的理解initUI不应该在调用initUI之前调用initUI

简单的答案是,你不应该使用Kotlin协同程序。

长的回答是, 你初始化你的UI 之前 ,你的代码需要初始化initUI ,所以在试图调用initUI之前,你必须等待 initUI完成。 由于内在的需要等待,没有理由过分复杂你的代码。 协程不是魔术。 他们不会等待那些需要花费很多时间的东西。 AndroidThreeTen.init将使用协程或不使用它们的时间相同。

你应该这样写你的代码:

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