如果我有一个实现Square
的类对象MainActivity
(不是MainActivty
,但是Square
创建View.OnTouchListener
个对象),那么{ {1}}中的{1}}方法在UI线程或其他线程上运行?
似乎它正在另一个线程上运行,因为我无法在onTouch()
方法中更新UI,而无需在Square
对象上调用onTouch()
。
===编辑在下面========================
我按照@pskink的建议记录了runOnUiThread()
,得到了以下结果:
MainActivity
所以,现在很清楚,我在Thread.currentThread().toString()
中运行的onCreate() in MainActivity: Thread[main,5,main]
onTouch() in Square: Thread[main,5,main]
方法在UI /主线程上运行。
感谢大家的帮助! : - )
答案 0 :(得分:0)
View.OnTouchListener是否在除UI线程之外的其他线程上运行?
没有。它应该在UI线程中调用
答案 1 :(得分:0)
请使用以下代码了解当前线程是否为UI /主线程。
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中并检查它。
答案 2 :(得分:0)
View.OnTouchListener是否在UI线程上运行?
是。 100%。默认情况下,系统将调用UI线程上的所有方法。
但您可以在onTouch()
方法内的工作线程上执行操作。
<强> PS,
必须在UI Thread
上执行UI更改。当您需要从runOnUiThread
更新用户界时,请考虑致电worker thread
。您应该考虑使用线程来避免ANR(应用程序没有响应)。一个好的开始是AsyncTask
,它有自己的方法在单独的线程中执行逻辑并更新Main Thread
上的UI。