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()
我正在尝试在后台线程上进行网络调用,所以我创建了一个这样的线程:
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()