簡體   English   中英

View.OnTouchListener是否在UI線程之外的其他線程上運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM