How to detect UI thread on Android?

后端 未结 6 674
终归单人心
终归单人心 2020-12-12 18:38

Is there a robust way to detect if Thread.currentThread() is the Android system UI thread in an application?
I would like to put some asserts in my model co

相关标签:
6条回答
  • 2020-12-12 19:01

    As of API level 23 the Looper has a nice helper method isCurrentThread. You could get the mainLooper and see if it's the one for the current thread this way:

    Looper.getMainLooper().isCurrentThread()
    

    It's practically the same as:

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

    but it could be a bit more readable and easier to remember.

    0 讨论(0)
  • 2020-12-12 19:11

    Couldn't you use the runOnUiThread method in the Activity class?See..

    http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29

    0 讨论(0)
  • 2020-12-12 19:13

    Besides checking looper, if you ever tried to logout thread id in onCreate(), you could find the UI thread(main thread) id always equals to 1. Therefore

    if (Thread.currentThread().getId() == 1) {
        // UI thread
    }
    else {
        // other thread
    }
    
    0 讨论(0)
  • 2020-12-12 19:20

    I think that best way is this:

     if (Looper.getMainLooper().equals(Looper.myLooper())) {
         // UI thread
     } else {
         // Non UI thread
     }
    
    0 讨论(0)
  • 2020-12-12 19:21
    public boolean onUIThread() {
        return Looper.getMainLooper().isCurrentThread();
    
    }

    But it requires API level 23

    0 讨论(0)
  • 2020-12-12 19:22

    Common practice to determine the UI Thread's identity is via Looper#getMainLooper:

    if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
      // On UI thread.
    } else {
      // Not on UI thread.
    }
    

    From API level 23 and up, there's a slightly more readable approach using new helper method isCurrentThread on the main looper:

    if (Looper.getMainLooper().isCurrentThread()) {
      // On UI thread.
    } else {
      // Not on UI thread.
    }
    
    0 讨论(0)
提交回复
热议问题