如何知道此线程是否为 UI 线程

2022-09-02 00:39:41

在Android上,有没有办法知道,如果线程运行我的代码,UI线程是否?在摇摆中,有人告诉我我是否在UI线程上,或者不在UI线程上。Android SDK中是否有任何功能可以让我知道这一点?SwingUtilities.isEventDispatchThread()


答案 1
  1. 从这里借用的答案:如何检查当前线程是否不是主线程

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

  2. 任何 Android 应用都只有一个 UI 线程,因此您可以在活动回调中的某个位置(如 onCreate())检查并存储其 ID,然后将其线程的 ID 与存储的 ID 进行比较。

    mMainThreadId = Thread.currentThread().getId();

  3. 无论如何,你可以省略检查,如果你想在UI线程上做一些事情,并有任何对活动的引用,通过使用

    mActivity.runOnUiThread( new Runnable() {
        @Override 
        public void run() {
        ...
        }
    });
    

保证在当前线程上运行,如果它是UI,或者在UI线程中排队。


答案 2

是的,有办法。对照主 lopper 的线程对象检查当前线程对象。主循环器始终位于 UI 线程中。

boolean isOnUiThread = Thread.currentThread() == Looper.getMainLooper().getThread();

推荐