我目前正在学习协程,需要您的帮助:)
如何强制等到 retrofit 初始化?
private lateinit var retrofit: Retrofit
init {
val time = measureTimeMillis {
launch {
val httpClient = createOkHttpClient(...)
val gson = createGson()
retrofit = createRetrofit(httpClient.await(), gson.await())}
}
logger.debug("Init time: $time")
}
private fun <T> createService(class: Class<T>) = retrofit.create(_class)
使用runBlocking可以运行,但是我真的不想使用它...
提前谢谢!
答案 0 :(得分:0)
如何强制等待对象 retrofit 初始化?
协程在这里无法为您提供帮助。如果在迁移到协程之前,您可以在Retrofit初始化时阻止主UI线程,那么就这样保留它,并且不涉及协程。
如果您有一个异步任务在后台执行,那么无论过去延迟初始化的后果是什么,协程也将保留它们。
协程为您提供的唯一优势是简洁的编程模型:
launch {
val httpClient = createOkHttpClient(...)
val gson = createGson()
retrofit = createRetrofit(httpClient.await(), gson.await())
... take the actions that depend on retrofit ...
}
httpClient
和gson
初始化后,协程将在UI线程上恢复。然后,它可以采取使您的应用程序初始化继续进行的操作。在此期间,活动的onCreate
已完成,因此您必须将那里依赖于Retrofit的所有内容移到launch
块中。