我想问一个好的开发人员。也许任何人都可以更好地解释。在网络的某个地方,我发现很少有作者使用协程代替例如asynctasks。只是想提高自己。这是我使用的一小部分代码。只想知道-是好是坏。如果没有-如何使其变得更好,或者最终我会以错误的方式使用它。
fun demoCall(callback: OnResponse) {
CoroutineScope(Dispatchers.Main).launch {
val result = withContext(Dispatchers.IO) {
Api.getResponse("GET", ApiConstants.test_endpoint)//networkOnMainThread exception if i will not use withContext
}
callback?.onResponse(result))
}
}
此示例为work。但是我不确定它的用法是否正确。 如果回到过去,
getResponse
位于asyncTask中。呼叫与匿名回叫相同。 如果使用这种方式很好,看来我可以使用该部分而无需回调? 就是这样
fun demoCall() {
CoroutineScope(Dispatchers.Main).launch {
val result = withContext(Dispatchers.IO) {
Api.getResponse("GET", ApiConstants.test_endpoint)
}
//do anything with result
//populate views , make new response etc..
}
如果有任何话告诉我,会很高兴-可以还是不可以:)问候
答案 0 :(得分:1)
我更喜欢使用suspend
关键字在调用者的视图中将异步调用视为同步。
例如,
suspend fun demoCall(): String {
return withContext(Dispatchers.IO) {
Api.getResponse("GET", ApiConstants.test_endpoint) // let's assume it would return string
}
}
呼叫者可以使用它
CoroutineScope(Dispatchers.Main).launch {
val result = demoCall() //this is async task actually, but it seems like synchronous call here.
//todo something with result
}