Intereting Posts

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

Есть ли надежный способ определить, является ли Thread.currentThread() потоком пользовательского интерфейса Android в приложении?
Я хотел бы добавить некоторые утверждения в свой код модели, который утверждает, что только один поток ( например, поток ui) обращается к моему состоянию, чтобы гарантировать, что никакой синхронизации не требуется.

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

Общей практикой для определения идентичности потока пользовательского интерфейса является Looper # getMainLooper :

 if (Looper.getMainLooper().getThread() == Thread.currentThread()) { // On UI thread. } else { // Not on UI thread. } 

Я думаю, что лучший способ:

  if (Looper.getMainLooper().equals(Looper.myLooper())) { // UI thread } else { // Non UI thread } 
 public boolean onUIThread() { return Looper . getMainLooper() . isCurrentThread() ; } 

Но для этого требуется уровень API 23

Помимо проверки петлителя , если вы когда-либо пытались выйти из идентификатора потока в onCreate() , вы могли бы найти, что идентификатор потока пользовательского интерфейса (основной поток) всегда равен 1. Поэтому

 if (Thread.currentThread().getId() == 1) { // UI thread } else { // other thread } 

Не могли бы вы использовать метод runOnUiThread в классе Activity ?

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29