Есть ли надежный способ определить, присутствует ли Thread.currentThread()
поток пользовательского интерфейса системы Android в приложении?
Я хотел бы добавить в код моей модели некоторые утверждения, которые утверждают, что только один поток ( например, поток пользовательского интерфейса) получает доступ к моему состоянию, чтобы гарантировать, что никакая синхронизация не требуется.
117
Ответы:
Обычная практика определения идентичности потока пользовательского интерфейса - через Looper # getMainLooper :
Начиная с уровня API 23 и выше, существует немного более читаемый подход с использованием нового вспомогательного метода isCurrentThread в основном цикле:
источник
Я думаю, что лучший способ таков:
источник
equals
поскольку мы только сравниваем ссылки, и, кроме того, они оба статичны.Начиная с уровня API 23, у
Looper
него есть хороший вспомогательный методisCurrentThread
. Вы можете получитьmainLooper
и посмотреть, подходит ли он для текущего потока, следующим образом:Практически то же самое, что:
но он мог бы быть немного более читаемым и более легким для запоминания.
источник
Но для этого требуется API 23 уровня.
источник
Помимо проверки петлителя , если вы когда-либо пытались выйти из системы с идентификатором потока
onCreate()
, вы можете обнаружить, что идентификатор потока пользовательского интерфейса (основного потока) всегда равен 1. Поэтомуисточник
Не могли бы вы использовать
runOnUiThread
метод вActivity
классе?http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
источник