Tôi có một hoạt động được sử dụng một cuộc gọi postDelayed:Espresso và 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);
}
}
này chạy lúc khởi động ứng dụng, và tôi cần phải điều hướng nó và màn hình đăng nhập của tôi. Tuy nhiên, loopMainThreadUntilIdle của UIController dường như không nhận được MessageQueue bên dưới trong trình xử lý. Như vậy, hành động này kết thúc ngay lập tức trong khi vẫn còn các thư trong hàng đợi.
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();
}
});
Tôi không thể tìm ra cách chặn cho đến khi hàng đợi được thoát. Bản thân Android đang ngăn cản tôi thực hiện rất nhiều thứ mà tôi đã thử (như mở rộng Handler và ghi đè phương thức postDelayed, v.v.)
Bất cứ ai có bất kỳ đề xuất nào về cách xử lý postDelayed?
Tôi muốn tránh uiController.loopMainThreadForAtLeast, mà dường như hacky (giống như một Thread.sleep sẽ)
Tôi đang suy nghĩ tôi có thể chỉ trừu tượng ra đẩy của tin nhắn vào hàng đợi, và tiêm một số thực hiện khác hoạt động như một IdlingResource. Tôi sẽ có một cài đặt mặc định trong mã của tôi để xử lý cho trình xử lý và trong mã thử nghiệm, mã này là IdlingResource và các điều chỉnh/giảm giá – Matt