View.OnTouchListener是否在除UI线程之外的其他线程上运行?

时间:2017-03-17 07:16:26

标签: java android multithreading ontouchlistener

如果我有一个实现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 /主线程上运行。

感谢大家的帮助! : - )

3 个答案:

答案 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。