如果运行我的代码的线程是UI线程,Android上有没有办法知道?在摇摆中有SwingUtilities.isEventDispatchThread()
告诉我我是否在UI线程上。 Android SDK中是否有任何功能让我知道这一点?
答案 0 :(得分:40)
从这里借来的答案:How to check if current thread is not main thread
Looper.myLooper() == Looper.getMainLooper()
任何Android应用程序只有一个UI线程,因此您可以在Activity回调中的某个位置(如onCreate())检查并存储其ID,然后将该线程的ID与存储的ID进行比较。
mMainThreadId = Thread.currentThread().getId();
无论如何,您可以省略检查是否要在UI线程上执行某些操作,并使用
对Activity进行任何引用mActivity.runOnUiThread( new Runnable() {
@Override
public void run() {
...
}
});
保证在当前线程上运行,如果是UI,或者在UI线程中排队。
答案 1 :(得分:8)
是的,有办法。 针对主lopper的线程对象检查当前线程对象。主循环器总是在UI线程中。
boolean isOnUiThread = Thread.currentThread() == Looper.getMainLooper().getThread();
答案 2 :(得分:0)
因此,默认情况下,您实际上始终在UI线程中工作。 另一件事:除非你明确要求它在另一个线程中,否则服务将在与其应用程序的活动相同的线程上运行。
那么,该怎么办?
答案 3 :(得分:-1)
将断点放在要检查的位置,当它被击中时,检查是否可以与UI交互(即,如果UI未被冻结)。如果您无法与UI进行交互,那么您将处于UI线程中,否则您将处于后台线程中。