小编Gla*_*adi的帖子

Kotlin 进程等待所有线程完成?

我写了这个简单的测试程序:

fun main() {
    println("Main Start")

    thread {
        println("Thread Start")
        Thread.sleep(3000)
        println("Thread End")
    }

    println("Main End")
}
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,输出是:

Main Start
Main End
Thread Start
Thread End
Run Code Online (Sandbox Code Playgroud)

我的期望是至少不会打印“线程结束”消息,因为主函数已结束并且该主线程应该完成运行。

Kotlin 进程是否总是在完成之前等待线程完成?

java parallel-processing multithreading kotlin

4
推荐指数
1
解决办法
106
查看次数

Android Kotlin 改造协程请求出现 moshi 错误

我目前正在开发一些基本的应用程序,我尝试从 API - 对象列表中获取响应。

我的数据类是:

@JsonClass(generateAdapter = true)
data class Tag(
    @Json(name = "id")
    val id: Int,
    @Json(name = "name")
    val name: String
)

@JsonClass(generateAdapter = true)
data class Test(
    @Json(name = "count")
    val count: Int,
    @Json(name = "next")
    val next: Int,
    @Json(name = "previous")
    val previous: Int,
    @Json(name = "results")
    val results: List<Tag>
)
Run Code Online (Sandbox Code Playgroud)

我的改造构建代码是:

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

return Retrofit.Builder()
    .baseUrl(SERVER_BASE_URL)
    .addCallAdapterFactory(CoroutineCallAdapterFactory())
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()
Run Code Online (Sandbox Code Playgroud)

而我的要求也很简单:

@GET("api/tags")
suspend fun getTags(): Deferred<Test>
Run Code Online (Sandbox Code Playgroud)

但是当我打电话时getTags()出现以下错误:

java.lang.IllegalArgumentException: Unable to …
Run Code Online (Sandbox Code Playgroud)

android kotlin retrofit moshi

2
推荐指数
1
解决办法
1749
查看次数

Kotlin 协程 UI 不会冻结

我最近检查了 livedata 协程,发现了一些我无法理解的东西。为什么这段代码(观察时)没有冻结 UI?

    val lv =
    liveData (context=Dispatchers.Main){
        var x = 0
        while (true){
            emit(x++)
            delay(1000)
            println(Thread.currentThread().name)
        }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢。

android kotlin android-livedata kotlin-coroutines

0
推荐指数
1
解决办法
120
查看次数