我的理解是,Android 检测的 JUnit 测试在它们自己的线程上运行,除非用 @UiThread
注释或调用 Instrumentation.runOnMainSync()
或 Activity.runOnUiThread()
.现在我正在尝试使用 CursorLoader
访问我的应用程序的数据库并填充 ListView
。我还有一个测试来验证是否正确填充了 ListView
。
我的问题是我需要同步三个线程:测试线程应该等到 CursorLoader
线程完成并通知 UI 线程填充 ListView
。为了创建一个 CursorLoader
,我向支持 LoaderManager
注册了一个 LoaderCallbacks
并在 onCreateLoader()
中创建了实例。然后 onLoadFinished()
更改 ListView
适配器的光标。
现在我需要确保我的测试等到 onLoadFinish()
被调用,然后再尝试访问 ListView
的 subview 。我目前的想法是将 waitForData()
方法添加到我的 LoaderCallbacks
实现中,测试可以调用该方法。但是,我不确定如何实现此方法。我可以简单地使用 wait()
然后在 onLoadFinished()
中使用 notifyAll()
吗?或者我是否需要使用更复杂的东西,例如 Semaphore
?
最佳答案
Espresso处理这种类型的同步。我还没有用它来弄清楚细节,但它看起来很有前途。
关于android - 同步测试线程、UI 线程和 CursorLoader 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825909/