Как проверить, работает ли в потоке пользовательского интерфейса в Android?

Как узнать, выполняется ли исполняемый код в основном потоке (поток пользовательского интерфейса)?
С Swing я использую метод isEventDispatchThread...

Ответ 1

Не похоже, что в SDK есть метод. Проверка находится в классе ViewRoot и выполняется путем сравнения Thread.currentThread() с членом класса, который назначен в конструкторе, но никогда не отображается.

Если вам действительно нужна эта проверка, у вас есть несколько вариантов ее реализации:

  • catch android.view.ViewRoot $CalledFromWrongThreadException
  • post a Runnable для просмотра и проверки Thread.currentThread()
  • используйте Handler, чтобы сделать то же самое

В общем, я думаю, вместо того, чтобы проверять правильность потока, вы должны просто убедиться, что код всегда выполняется в потоке пользовательского интерфейса (с использованием 2. или 3.).

Ответ 2

Используйте Looper.getMainLooper(). getThread(), чтобы получить поток пользовательского интерфейса. Вы можете проверить, является ли это текущим потоком, используя следующее выражение:

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

Ответ 4

Вы также можете использовать runOnUiThread, для этого требуется только runnable, который будет запущен в потоке ui

Ответ 5

Если вы хотите узнать, находитесь ли вы в основном потоке, вы можете попробовать:

Context c = **Get a Context**;
Thread.currentThread() == c.getMainLooper().getThread();

Конечно, я могу ошибаться, и это может полностью отразить ваше приложение.