Mam aktywność, która jest przy użyciu postDelayed połączenia:espresso i 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);
}
}
To działa na starcie aplikacji, i muszę go i mój ekran logowania nawigacji. Jednak pętla UMontrolThightThntilIdle UIController prawdopodobnie nie uwzględnia bazowego MessageQueue w programie obsługi. W związku z tym ta czynność kończy się natychmiast, gdy w kolejce nadal znajdują się komunikaty.
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();
}
});
Nie potrafiłem ustalić, jak zablokować, dopóki kolejka nie zostanie wyczerpana. Sam system Android uniemożliwia mi robienie wielu rzeczy, których bym próbował (np. Rozszerzenie programu Handler i nadpisanie metody postDelayed, itp.).
Ktoś ma jakieś sugestie dotyczące obsługi postDelayed?
wolałbym uniknąć uiController.loopMainThreadForAtLeast, co wydaje się hacky (jak Thread.Sleep będzie)
Zastanawiam się, czy mogę po prostu zanalizować wysyłanie wiadomości do kolejki i wstrzyknąć inną implementację, która działa jak IdlingResource. Będę miał domyślną implementację w moim kodzie, która odsyła do programu obsługi, a w kodzie testowym: IdlingResource i icnrements/decrements – Matt