你正在做的是將lambda傳遞給runOnUiThread
函數。它將運行該lambda,並創建一個從Runnable
繼承的object
,然後不執行任何操作。也許你可以看到一個更好一點,如果你格式化像這樣(添加了一些額外的日誌報表及說明):
runOnUiThread({
Log.i(TAG, "This is run")
object : Runnable { // This whole expression
override fun run() { // returns an object which
Log.i(TAG, "runOnUiThread") // is a Runnable, but does
} // not at any point invoke
} // its "run" method
Log.i(TAG, "And so is this")
})
創建的object
沒有分配給一個變量,並且從未使用過。如果你想在一個Runnable
實例的runOnUiThread
方法傳遞,你可以做到這一點的只是把它的runOnUiThread
調用的括號內:
runOnUiThread(
object : Runnable {
override fun run() {
Log.i(TAG, "runOnUiThread")
}
}
)
到雖然使用runOnUiThread最簡單的方法是在一個lambda傳遞使用SAM轉換,並直接在其中寫入要執行的代碼。
runOnUiThread {
Log.i(TAG, "runOnUiThread")
}
這裏的official documentation covering SAM conversions,這恰好用在它的例子Runnable
。
真棒澄清。謝謝@ zamb13 –