异步不等待等待
Async not waiting for await
我是 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 时库没有初始化的问题。根据我的理解,在调用 AndroidThreeTen.init
之前不应调用 initUI
。
简短的回答是您不应该为此使用 Kotlin 协程。
长答案是您的代码需要初始化 AndroidThreeTen 在您初始化您的UI之前,所以您必须等待 让 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()
}
我是 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 时库没有初始化的问题。根据我的理解,在调用 AndroidThreeTen.init
之前不应调用 initUI
。
简短的回答是您不应该为此使用 Kotlin 协程。
长答案是您的代码需要初始化 AndroidThreeTen 在您初始化您的UI之前,所以您必须等待 让 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()
}