我有使用postDelayed呼叫活动:这将运行在应用程序启动咖啡和postDelayed
public class SplashActivity extends Activity {
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
handler.postDelayed(new Runnable() {
public void run() { finish(); }
}, 3000L);
}
}
,我需要导航它和我的登录屏幕。但是,UIController的loopMainThreadUntilIdle似乎并未将处理程序中的基础MessageQueue考虑在内。因此,此行为在队列中仍有消息时立即结束。
onView(withId(R.id.splash_screen)).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(View.class);
}
@Override
public String getDescription() {
return "";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
}
});
我一直无法弄清楚如何阻塞,直到队列耗尽。 Android本身阻止我做了很多我想尝试的事情(比如扩展Handler和覆盖postDelayed方法等等)。
任何人都有关于如何处理postDelayed的建议?
我宁愿避免uiController.loopMainThreadForAtLeast,这似乎哈克(像了Thread.sleep会)
我想我可能只是抽出消息推入队列,并注入一些其他实现作为IdlingResource。我将在我的代码中有一个默认实现,它遵循处理程序,在测试代码中有一个是IdlingResource和icnrements/decrements – Matt