ProgressBar в Android показывает только после завершения какой-то операции - PullRequest
0 голосов
/ 22 февраля 2019

Я пытался использовать ProgressBar в моей Активности , когда я выполняю кратковременную операцию.И я понял, что когда я устанавливаю ProgressBar visibility в true, он становится видимым только после выполнения операции.

progressBar.setVisibility(View.VISIBLE);
calculate();

Затем я нашел решение, которое мне нужно установить ProgressBar видимость в другой теме .Поэтому мой вопрос: почему я должен установить его в другой Thread ?

Например, если я оставлю свой ProgressBar с истинной видимостью при создании (в onCreate () ), он будет прогрессировать, и я могу взаимодействовать с UI в этот момент.Я заключил, что они выполняются в один поток, и все в порядке.Но мне кажется, я ошибаюсь.

1 Ответ

0 голосов
/ 22 февраля 2019

Инструментарий Android UI не является поточно-ориентированным.Это означает, что вы не должны манипулировать своим пользовательским интерфейсом из рабочего / фонового потока.Вы должны делать все манипуляции со своим пользовательским интерфейсом из потока пользовательского интерфейса (основного).

Инструментарий пользовательского интерфейса Android включает элементы в android.widget & android.view пакетах

Полезное правило:

  1. Не блокируйте пользовательский интерфейспоток (не запускать операции, которые имеют неопределенное время в потоке пользовательского интерфейса)
  2. Не получать доступ к инструментарию пользовательского интерфейса Android извне потока пользовательского интерфейса

Подробнее об этом рассказывается в здесь

Запуск фоновых потоков с использованием AsyncTask или Загрузчики всегда позволяют вам обновлять пользовательский интерфейс, когда фоновые потоки приводят к их onPostExecute() и onLoadFinished() соответственно.

Итак, по вашему вопросу вы должны обновить ProgressBar из потока пользовательского интерфейса, а не из других потоков.

...