android - 同步测试线程、UI 线程和 CursorLoader 线程

标签 android multithreading testing android-listview synchronization

我的理解是,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/

相关文章:

android - Google map Activity 无法启动

Android广播接收器蓝牙事件捕获

c# - 处理从串口读取的数据时串口线程锁定

javascript -/dev/null 用于 http 请求

testing - Ajax TruClient,使用范围和限制?

java - android:将图像发布到服务器时如何添加edittext值

android - 如何读取NFC A类卡页?

Python 线程 - 将控制权返回给终端,同时保持框架打开

ios - iOS 上异步调用的最佳性能是什么?

ruby - WebDriver/Ruby 测试报告?