我正在嘗試在后臺執行緒上進行網路呼叫,所以我正在創建一個這樣的執行緒:
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
uj5u.com熱心網友回復:
private val networkThread = Thread("NetworkThread")
創建一個thread
什么都不做的,因為你沒有override
它的 run 方法。
networkThread.run {
....
}
run
您正在使用networkThread
的方法不是類的run()
方法,Thread
而是將作為接收者并回傳結果的scope
函式,Kotlin
這就是您得到的原因context object
lambda
Network Error android.os.NetworkOnMainThreadException
要讓 athread
在后臺執行緒上執行某些操作,您必須重寫它的run
方法,或者您可以創建 aRunnable
并使用它來創建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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470140.html