我有使用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