Intereting Posts
Я использую PhoneGap, и на моих страницах я пытаюсь использовать FontAwesome, но он не работает? Невозможно использовать сканер штрих-кода Google Активность PopUp начинается снова, когда она запускается из "последних приложений" Переупорядочить страницы в FragmentStatePagerAdapter, используя getItemPosition (объект Object) Что заставляет контент ContentResolver.query () Android возвращать null? Добавить новое уведомление при получении push-уведомления (не заменяя старого) В MVP находится onClick ответственность View или Presenter? Как я могу получить местоположение центра на картах v2 на Android? Подавить Gradle Warning в Android Studio? Используя getWindowManager () внутри BroadcastReceiver Как динамически добавлять изображение в ImageView из массива JSON Серьезные проблемы с обновлением Studio Studio Как отправить сообщение с Android на Windows с помощью USB Обнаружение линии на музыкальном листе в Android Как создать пользовательские свойства в xml для Android?

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

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

Solutions Collecting From Web of "Как проверить, работает ли в потоке пользовательского интерфейса в Android?"

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

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

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

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

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

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

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

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

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

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

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

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

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