首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >View.OnTouchListener是否运行在UI线程之外的其他线程上?

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

Stack Overflow用户
提问于 2017-03-17 07:16:25
回答 3查看 432关注 0票数 0

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

谢谢大家的帮助!

EN

回答 3

Stack Overflow用户

发布于 2017-03-17 07:16:57

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

不是的。它应该在UI线程中调用。

票数 0
EN

Stack Overflow用户

发布于 2017-03-17 07:19:56

请使用下面的代码来知道当前线程是否是UI/主线程。

代码语言:javascript
复制
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并检查它。

票数 0
EN

Stack Overflow用户

发布于 2017-03-17 07:34:36

View.OnTouchListener在UI线程上运行吗?

是。100%。默认情况下,系统将在UI线程上调用所有方法。

但是,您可以在onTouch()方法中对工作线程执行操作。

Ps,

必须在UI Thread**.上执行用户界面更改考虑在需要从runOnUiThread worker thread**.更新UI时调用**您应该考虑使用线程来避免ANR (应用程序没有响应)。一个好的开端是** AsyncTask**,,它有自己的方法在单独的线程中执行逻辑并在** Main Thread**.**上更新UI

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42851428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档