Изменить ориентацию - что-то вместо сна - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь сделать тест, который проверяет поведение моего приложения после большой смены ориентации.

  for (int i = 0; i < 100; i++) {
            mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            Thread.sleep(3000);
            mActivityTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            Thread.sleep(3000);
        }

без sleep слишком быстро - мой пользовательский интерфейс не сможет загрузить все раньшеследующая смена ориентации.Но ?Thread.sleep не очень хорошо выглядит

Как лучше это кодировать?Что я должен делать вместо того, чтобы наступать на сон?

1 Ответ

0 голосов
/ 21 октября 2018

Если вы знаете, как проверить, что пользовательский интерфейс полностью загружен, вы можете использовать ожидание занятости:

busyWaitFor(() -> isUILoaded(), 10000, 200);

с busyWaitFor, реализованным следующим образом:

private static boolean busyWaitFor(BooleanSupplier condition, int timeoutMilSec, int checkIntervalMilSec) {
    long startTime = System.currentTimeMillis();

    boolean interrupted;
    do {
        if (condition.getAsBoolean()) {
            return true;
        }

        boolean timeoutReached = System.currentTimeMillis() - startTime >= (long)timeoutMilSec;
        if (timeoutReached) {
            return false;
        }

        interrupted = sleep(checkIntervalMilSec);
    } while(!interrupted);

    return false;
}
...