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

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

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

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

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

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

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

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

Это stream пользовательского интерфейса, если:

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

Исходный исходный код AOSP: ManagedEGLContext.java#L100 , SharedPreferencesImpl.java#L470 , Instrumentation.java#L1650 и т . Д.

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

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

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

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

  • Как выполнить веб-запрос в своем streamе?
  • Как приостановить / возобновить stream в Android?
  • Приложение может делать слишком много работы над своей основной нитью
  • java.lang.IllegalMonitorStateException: объект не заблокирован streamом перед wait ()?
  • Давайте будем гением компьютера.