У меня просто была эта проблема.Я использовал статический AtomicInteger в своей деятельности для хранения прогресса.Загрузчик обновляет его с помощью обратного вызова, и операция опрашивает его и отображает ход выполнения.
В обратном вызове загрузчика onLoadFinished
Я скрываю свою панель прогресса, что приводит к выходу из цикла опроса.
Обычно я бы избегал статического состояния, но я думаю, что в целом это проще, чемальтернативы.В моем случае у меня другой макет в альбомной ориентации, поэтому я счастлив, оставив изменения ориентации вести себя как обычно.
private Handler progressHandler; // init with new Handler(getMainLooper())
private static AtomicInteger progress = new AtomicInteger(0);
...
private void beginProgressUiUpdates() {
progress.set(0);
displayProgress();
progressHandler.postDelayed(pollProgress, PROGRESS_POLL_PERIOD_MILLIS);
}
private Runnable pollProgress = new Runnable() {
public void run() {
if (findViewById(R.id.progressPanel).getVisibility() == View.VISIBLE) {
displayProgress();
progressHandler.postDelayed(pollProgress, PROGRESS_POLL_PERIOD_MILLIS);
}
}
};
private void displayProgress() {
((ProgressBar)findViewById(R.id.progressBar)).setProgress(progress.get());
}