[英]Does View.OnTouchListener run on other thread than the UI thread?
如果我有一個類的對象Square
(即不是MainActivity
,但MainActivty
創建Square
對象)實現View.OnTouchListener
,請問onTouch()
內法Square
UI線程或其他線程上運行?
好像它正在另一個線程上運行,因為如果不對MainActivity
對象調用runOnUiThread()
,就無法從onTouch()
方法中更新UI。
===編輯下面========================
我按照@pskink的建議記錄了Thread.currentThread().toString()
,並得到以下結果:
onCreate() in MainActivity: Thread[main,5,main] onTouch() in Square: Thread[main,5,main]
因此,現在很清楚,我在Square
中運行的onTouch()
方法在UI /主線程上運行。
謝謝大家的幫助! :-)
View.OnTouchListener是否在UI線程之外的其他線程上運行?
不,應該在UI線程中調用
請使用下面的代碼來了解當前線程是否為UI / Main線程。
if(Looper.myLooper() == Looper.getMainLooper()) {
// Current Thread is Main Thread.
}
or you can also use this
if(Looper.getMainLooper().getThread() == Thread.currentThread()) {
// Current Thread is Main Thread.
}
從我的角度來看,如果您仍然有疑問,可以在UI線程上運行,可以將上面的代碼放在onTouchListener中並進行檢查。
View.OnTouchListener是否在UI線程上運行?
是。 100%。 默認情況下,系統將在UI線程上調用所有方法。
但是您可以在onTouch()
方法中的工作線程上執行操作。
PS,
UI更改必須在UI Thread
上執行。 在需要從worker thread
更新UI時,請考慮調用runOnUiThread
。 您應該考慮使用線程避免ANR(應用程序無響應)。 AsyncTask
是一個很好的開始,它具有自己的方法來在單獨的線程中執行邏輯並更新Main Thread
上的UI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.