使用Robolectric检查方法是否在UI线程上调用

4

这里是否有人知道如何编写一个测试(最好附带示例),以检查方法是否在UI线程上调用?

2个回答

4

以下翻译内容参考以下链接:

如何检查当前线程是否为主线程

如何知道这个线程是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() {
    ...
    }
});

希望这有所帮助。


3

UI线程的ID始终为1,因此您可以尝试检查:

if(Thread.currentThread().getId() == 1) {
///...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接