再测试下挂起函数作用。定义函数:
Kotlin
suspend fun requestNetworkSuspend(apiName: String): String {
// 使用 withContext 切换到 IO 线程执行模拟网络请求
return withContext(Dispatchers.IO) {
Log.d("zxzx", "[$apiName] 模拟网络请求开始,线程:${Thread.currentThread().name}")
// 模拟网络延迟
delay(2000) // 模拟2秒网络响应时间
Log.d("zxzx", "[$apiName] 模拟网络请求结束,线程:${Thread.currentThread().name}")
// 模拟不同API返回不同数据
when(apiName) {
"接口1" -> "接口1响应数据"
"接口2" -> "接口2响应数据"
else -> "默认响应数据"
}
}
}
然后在onCreate方法中调用:
Kotlin
lifecycleScope.launch {
Log.d("zxzx", "Activity协程开始执行,线程:${Thread.currentThread().name}")
val data = requestNetworkSuspend("接口1")
Log.d("zxzx", "获取到data:${data}")
Log.d("zxzx", "Activity协程再做其他事,线程:${Thread.currentThread().name}")
Log.d("zxzx", "金麟岂是池中物, \n一遇风云便化龙。\n九霄龙吟惊天变,\n风云际会浅水游。")
}
Log.d("zxzx", "onCreate方法结束执行,线程:${Thread.currentThread().name}")
运行,打印:

ok. 这样调用符合实际需要。而且也没阻塞main线程。