gpt4 book ai didi

Android 服务中的 Kotlin 协程

转载 作者:IT老高 更新时间:2023-10-28 13:42:37 25 4
gpt4 key购买 nike

我有一个 Android 服务,它在服务器在线时启动并与服务器同步不同类型的数据。我是 Kotlin 协程的新手,我正在尝试完成以下任务:

fun syncData{
//Job1 make retrofit call to server
//Job2 make retrofit call to server after job1 is done.
//Job3 make retrofit call to server after job2 is done and so on.
//After all jobs are done I'll stop service.
}

我正在关注这个帖子: Kotlin Coroutines the right way in Android

这让我想到了这个解决方案:

fun syncData() = async(CommonPool){
try{
val sync1 = async(CommonPool){
job1.sync()
}

val sync2 = async(CommonPool){
job2.sync()
}

val sync3 = async(CommonPool){
job3.sync()
}

val sync4 = async(CommonPool){
job4.sync()
}

job1.await()
job2.await()
job3.await()
job4.await()
}catch (e: Exception){
}finally {
stopSelf()
}
}

但是当我在 logcat 上获得改造的日志时,每个调用都是混合的。来自 job3 的调用在 job1 之前,以此类推。如何在管道中执行它们?我有点迷失在 Kotlin 的协程中,所以我不知 Prop 体如何实现。

最佳答案

同意@s1m0nw1和他的answer

这太难接近了。您所需要的就这么简单:

val job = SupervisorJob()

fun syncData() = launch(job) {
try {
val result1 = makeRetrofitCall1()
val result2 = makeRetrofitCall2(result1)
...
val resultN = makeRetrofitCallN(resultNMinusOne)
} catch(e: Exception) {
// handle exception
} finally {
stopSelf()
}
}

override fun onDestroy() {
super.onDestroy()
job.cancel()
}

这里 makeRetrofitCall 表示直接 API 调用为 retrofitClient.getData() 其中 retrofitClient

interface RetrofitClient {

@GET("endpoint")
suspend fun getData(): MyCustomResult
}

关于Android 服务中的 Kotlin 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45945567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com