How to check if running on UI thread in Android? [duplicate]
Use Looper.getMainLooper().getThread() to get the UI thread. You can check if it is the current thread using the following expression:
Looper.getMainLooper().getThread() == Thread.currentThread()
It is UI thread if:
Looper.myLooper() == Looper.getMainLooper()
Source AOSP source code: ManagedEGLContext.java#L100
, SharedPreferencesImpl.java#L470
, Instrumentation.java#L1650
and so on.
Doesn't look like there is a method for that in the SDK. The check is in the ViewRoot
class and is done by comparing Thread.currentThread()
to a class member which is assigned in the constructor but never exposed.
If you really need this check you have several options to implement it:
- catch the android.view.ViewRoot$CalledFromWrongThreadException
-
post
aRunnable
to a view and checkThread.currentThread()
- use a
Handler
to do the same
In general I think instead of checking whether you're on the correct thread, you should just make sure the code is always executed on the UI thread (using 2. or 3.).