我不知道CoroutineScope(Dispatchers.Main).launch和runOnUiThread之間有什么區別,我認為兩者都將在主執行緒上運行。
但仍然混亂那里有什么區別。?
謝謝。
uj5u.com熱心網友回復:
首先,您runOnUiThread只能在Activity.
其次,您不能從中呼叫掛起函式runOnUiThread,而可以在CoroutineScope(Dispatchers.Main).launch塊中呼叫。
第三,runOnUiThread檢查當前 ui 執行緒是否正忙于其他操作,如果是,則將任務發布到活動處理程式,并在輪到它時執行。
uj5u.com熱心網友回復:
它們是使用不同技術的不同事物,實際上取決于您是否已經在使用協程。如果是這樣,當您的代碼需要在主執行緒上時,只需切換到Main調度程式。如果您不使用協程,并且您明確使用另一個執行緒,那么您可以使用runOnUiThread在主執行緒上運行一些代碼。如果您不使用協程或執行緒,那么您根本不需要呼叫runOnUiThread!
沒有什么可以阻止您從runOnUiThread協程內部使用 - 但它并不是真正適合這項作業的工具,您會不必要地超出協程處理之外。另外,就像Steyrix所說的那樣,您需要訪問類似 an 的東西Activity才能做到這一點,這可能意味著在長期運行的協程中持有對應該進行垃圾收集的協程的參考。
還有很多其他方法可以回傳主執行緒,例如postingRunnable到 a Handler(或通過 a View),或postValue方法 on LiveData。如果有更簡潔方便的東西,您不必切換調度程式,這完全取決于情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532702.html
