无法在后台线程上调用watchForever

时间:2018-09-11 11:32:41

标签: android android-room android-architecture-components android-livedata androidx

一段时间以来,我一直在使用here中所述的observeForever()方法来测试Room和LiveData,并且它运行良好。但是,当我更改为Android Studio 3.2(或者不确定是androidx重构)时,该方法突然停止工作,抛出

java.lang.IllegalStateException: Cannot invoke observeForever on a background thread

我们如何解决这个问题?

1 个答案:

答案 0 :(得分:12)

我通过添加规则InstantTaskExecutorRule解决了这个问题。根据{{​​3}},它将

  

一种JUnit测试规则,该规则将体系结构组件使用的后台执行器与另一个同步执行每个任务的执行器交换。

所以需要添加

@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

使其可以正常工作。相当于Java的

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

您还需要添加

androidTestImplementation "androidx.arch.core:core-testing:2.0.0"

至您的build.gradle依赖项。