如何检查在Android的UI线程上运行?

我怎么知道运行的代码是否在主线程(UI线程)上执行?
使用Swing我使用isEventDispatchThread方法…

看起来不像SDK中有一个方法。 该检查位于ViewRoot类中,并通过将Thread.currentThread()与在构造函数中分配但从未公开的类成员进行比较来完成。

如果你真的需要这个检查你有几个选项来实现它:

  1. 捕获android.view.ViewRoot $ CalledFromWrongThreadException
  2. post一个Runnable到视图并检查Thread.currentThread()
  3. 使用Handler来做同样的事情

一般来说,我认为不是检查你是否在正确的线程上,而是应该确保代码总是在UI线程上执行(使用2或3)。

使用Looper.getMainLooper()。getThread()来获取UI线程。 您可以使用以下expression式检查它是否是当前线程:

 Looper.getMainLooper().getThread() == Thread.currentThread() 

这是UI线程,如果:

 Looper.myLooper() == Looper.getMainLooper() 

源代码AOSP源代码: ManagedEGLContext.java#L100SharedPreferencesImpl.java#L470Instrumentation.java#L1650 等等 。

你也可以使用runOnUiThread ,它只需要一个将在ui线程中运行的runnable

如果你想知道你是否在主线程,你可以尝试:

 Context c = **Get a Context**; Thread.currentThread() == c.getMainLooper().getThread(); 

当然,我可能是错的,这可能会完全打击你的应用程序。