У меня есть активность, которая использует вызов 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);
}
}
Это запускается при запуске приложения, и мне нужно перемещаться по нему и моему экрану входа в систему. Однако loopMainThreadUntilIdle UIController, похоже, не принимает во внимание базовую 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)