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

use*_*789 22 java android ui-thread

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

Fen*_*res 40

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

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

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

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

  3. 无论如何,您可以省略检查是否要在UI线程上执行某些操作,并通过使用对Activity进行任何引用

    mActivity.runOnUiThread( new Runnable() {
        @Override 
        public void run() {
        ...
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

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


小智 8

是的,有一种方法.针对主lopper的线程对象检查当前线程对象.主循环器总是在UI线程中.

boolean isOnUiThread = Thread.currentThread() == Looper.getMainLooper().getThread();
Run Code Online (Sandbox Code Playgroud)