РЕДАКТИРОВАТЬ: Пока мой ответ работает, ответ Eli Konkys лучше. Используйте это.
если ваш поток выполняется в потоке пользовательского интерфейса, то он должен отказаться от потока пользовательского интерфейса, чтобы дать представлениям возможность обновиться. В настоящее время вы указываете индикатор выполнения «обновить до 1, обновить до 2, обновить до 3», не выпуская поток UI, чтобы он действительно мог обновляться.
Лучший способ решить эту проблему - использовать Asynctask , он имеет встроенные методы, которые запускаются как в потоке пользовательского интерфейса, так и вне его:
public class MahClass extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
while (progressBar.getProgress() < progress) {
publishProgress();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
progressBar.incrementProgressBy(1);
}
}
Поначалу AsyncTask может показаться сложным, но он действительно эффективен для множества различных задач или, как указано в Android API:
"AsyncTask обеспечивает правильное и простое использование потока пользовательского интерфейса. Этот класс
позволяет выполнять фоновые операции и публиковать результаты в пользовательском интерфейсе
поток без необходимости манипулировать потоками и / или обработчиками. "