Kotlin new Thread 在主线程上仍然是 运行

Kotlin new Thread is still running on main thread

我正在尝试在后台线程上进行网络调用,所以我创建了一个这样的线程:

private val networkThread = Thread("NetworkThread")

init {
    networkThread.start()
}

然而,当我在线程上尝试 运行 像这样的东西时:

    networkThread.run {
        try {
            socket = Socket(ip, port)
        } catch (e: java.lang.Exception) {
            Log.e(TAG, "Network Error $e")
        }
    }

我收到以下错误:Network Error android.os.NetworkOnMainThreadException

为什么这仍然 运行 在 MainThread 上?如果我通过使用 runnable 作为它工作的参数来创建线程,但我很好奇为什么这样做仍然算作 MainThread

private val networkThread = Thread("NetworkThread") 创建一个 thread 什么都不做,因为你没有 override 它的 运行 方法。

networkThread.run {
        ....
}
您在 networkThread 上使用的

run 方法不是 Thread class 的 run() 方法,而是 scope 函数Kotlin 给出 context object 作为接收者,returns 给出 lambda 结果,这就是为什么你得到 Network Error android.os.NetworkOnMainThreadException

要让 thread 在后台线程上执行某些操作,您必须覆盖它的 run 方法,或者您可以创建一个 Runnable 并使用它来创建 thread对象

val networkThread = object: Thread() {
        override fun run() {
            try {
                socket = Socket(ip, port)
            } catch (e: java.lang.Exception) {
                Log.e(TAG, "Network Error $e")
            }
        }
    }
    
networkThread.start()