У меня есть простая страница входа в систему, где пользователь вводит пароль, и этот пароль используется для расшифровки некоторых данных и создания основного действия.Процесс генерации ключа, вызова базы данных и создания основного действия занимает около 5 секунд, поэтому я хочу, чтобы колесо прогресса отображалось на экране входа в систему сразу после того, как пользователь нажимает кнопку входа.
К сожалению, поскольку android обрабатываетПользовательский интерфейс обновляется неблокирующим образом, индикатор выполнения не будет отображаться до запуска функции входа в систему.Кажется, я не могу найти способ принудительно обновить блокировку пользовательского интерфейса для представления в Android.invalidate()
и postInvalidate()
оба не будут работать, поскольку они просто уведомляют Android о том, что в какой-то момент в будущем должно произойти перерисовка.
Вот пример кода, объясняющего, что я пытаюсь выполнить:
try {
progressBar.setVisibility(View.VISIBLE);
passwordEditText.setEnabled(false);
Key key = doLogin(passwordEditText.getText()); // Long operation
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.putExtra("Key", key);
startActivity(intent);
getActivity().finish();
} catch (Exception e) {
passwordEditText.setError(getString(R.string.login_error));
Log.e("Login", e.getMessage());
} finally {
progressBar.setVisibility(View.INVISIBLE);
passwordEditText.setEnabled(true);
}
Если невозможно переопределить поведение по умолчанию и вызвать немедленное блокирование перерисовки, то как лучше всего реализовать колесо прогресса, пока работает метод doLogin()
?