如何检测Android上的UI线程?

有没有一个强大的方法来检测如果Thread.currentThread()是一个应用程序中的Android系统UI线程?
我想在我的模型代码中放置一些断言,断言只有一个线程( 例如 ui线程)访问我的状态,以确保不需要任何种类的同步。

确定UI线程身份的常见做法是通过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

除了检查looper之外 ,如果你曾经尝试在onCreate() 注销线程id,你可以发现UI线程(主线程) id总是等于1.因此

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