Почему обновление ProgressBar в фоновом потоке не вызывает CalledFromWrongThreadException - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь пересмотреть концепцию Handler. Поэтому я просто создаю Thread, чтобы обновить ProgressBar и посмотреть, будет ли он выдавать исключение.

Вот мой код

@Override
public void onResume() {
    super.onResume();
    new Thread(){
        @Override
        public void run() {
            super.run();
            while (progressBar.getProgress() <100){
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                progressBar.setProgress(pb.getProgress()+10);
            }
        }
    }.start();
}

Мой вопрос прост. Почему не генерируется исключение CalledFromWrongThreadException? Если это так, то должны ли мы забыть о Handler, когда имеем дело с обновлением прогресса?

1 Ответ

0 голосов
/ 18 марта 2020

https://cs.android.com/android/platform/superproject/+/android-10.0.0_r30: frameworks / base / core / java / android / widget / ProgressBar.java; l = 1610

Неудача - ProgressBar имеет специальную поддержку для обновления его прогресс из другого потока. Вот почему он что-то не выдает.

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

...