如何检测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 }
你不能在Activity
类中使用runOnUiThread
方法吗?