为什么在后台线程中更新ProgressBar不会抛出CalledFromWrongThreadException

问题描述 投票:0回答:1

我正在尝试回顾Handler的概念。因此,我只是创建一个线程来更新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?

android multithreading handler
1个回答
0
投票

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

运气不好-ProgressBar对从另一个线程更新进度有特殊的支持。这就是为什么它不扔东西的原因。

但是因为正是这种操作获得了额外的支持,对第二个问题没有。通常,您不会停止使用处理程序。例如,对于某些情况,您需要在更新进度时另外做一点UI事情。

© www.soinside.com 2019 - 2024. All rights reserved.