如果我有一个类对象Square (不是MainActivity,但MainActivty创建了Square对象)来实现View.OnTouchListener,那么Square中的onTouch()方法是在UI线程上运行还是在另一个线程上运行?
它似乎运行在另一个线程上,因为如果不对我的onTouch()对象调用runOnUiThread(),我就无法从MainActivity方法中更新UI。
===编辑位于========================下面
我按照@pskink的建议记录了Thread.currentThread().toString(),并得到了以下结果:
onCreate() in MainActivity: Thread[main,5,main] onTouch() in Square: Thread[main,5,main]
因此,现在很明显,我在Square中运行的Square方法在UI/主线程上运行。
谢谢大家的帮助!
发布于 2017-03-17 07:16:57
View.OnTouchListener是否运行在UI线程之外的其他线程上?
不是的。它应该在UI线程中调用。
发布于 2017-03-17 07:19:56
请使用下面的代码来知道当前线程是否是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并检查它。
发布于 2017-03-17 07:34:36
View.OnTouchListener在UI线程上运行吗?
是。100%。默认情况下,系统将在UI线程上调用所有方法。
但是,您可以在onTouch()方法中对工作线程执行操作。
Ps,
必须在UI Thread**.上执行用户界面更改考虑在需要从runOnUiThread worker thread**.更新UI时调用**您应该考虑使用线程来避免ANR (应用程序没有响应)。一个好的开端是** AsyncTask**,,它有自己的方法在单独的线程中执行逻辑并在** Main Thread**.**上更新UI
https://stackoverflow.com/questions/42851428
复制相似问题