Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if running on UI thread in Android? [duplicate]

How can I know if the running code is executed on the main thread (UI thread)?
With Swing I use the isEventDispatchThread method...

like image 329
Arutha Avatar asked Dec 04 '09 08:12

Arutha


3 Answers

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()
like image 83
Dan Syrstad Avatar answered Oct 31 '22 15:10

Dan Syrstad


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.

like image 85
balazsbalazs Avatar answered Oct 31 '22 16:10

balazsbalazs


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:

  1. catch the android.view.ViewRoot$CalledFromWrongThreadException
  2. post a Runnable to a view and check Thread.currentThread()
  3. 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.).

like image 12
Josef Pfleger Avatar answered Oct 31 '22 16:10

Josef Pfleger