这里是否有人知道如何编写一个测试(最好附带示例),以检查方法是否在UI线程上调用?
以下翻译内容参考以下链接:
1) Looper.myLooper() == Looper.getMainLooper()
如果当前线程是主线程,则Looper.myLooper() == Looper.getMainLooper()
。Loops可以通过处理消息来进行调度,Android应用程序有一个主线程负责处理UI事件和其他系统级别的事件。在这种情况下,当您想在非UI线程执行操作时,需要检查当前线程是否为主线程。
2) Android应用程序只有一个UI线程,因此您可以在Activity回调(例如onCreate())中某处检查并存储其ID,然后仅将该线程的ID与存储的线程ID进行比较,以确定当前线程是否为UI线程。
mMainThreadId = Thread.currentThread().getId();
3) 如果您想在UI线程上执行某些操作,并且使用了Activity的任何引用,请使用
mActivity.runOnUiThread( new Runnable() {
@Override
public void run() {
...
}
});
希望这有所帮助。
UI线程的ID始终为1,因此您可以尝试检查:
if(Thread.currentThread().getId() == 1) {
///...
}