在 Android APP 的主线程中更新进度条

Update ProgressBar within MainThread in AndroidAPP

我有 2 个按钮 以及一个 进度条 。 现在我想从 0 - 100 计数并用计数器更新进度条。不幸的是,这个计数太快了,我看不到进度(我只能看到进度条在 'millisecond'. 内从 0 跳到 100)。

这是我到目前为止尝试过的方法,但是和以前一样发生了同样的事情。

点击按钮启动计数器,app无响应(我在mainThread中计算,这样就OK了(以及我在这里想要完成的事情 (!))) 并且不久之后将 进度条设置为 100中间没有任何东西

现在,如果您能引导我进入正确的方向,那将不胜感激! :)

public class MainActivity extends ActionBarActivity {
    public String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addButtonListeners();
    }

    public void addButtonListeners() {
        Button firstButton, secondButton;
        final ProgressBar pgBar;

        firstButton = (Button) findViewById(R.id.first_button);
        secondButton = (Button) findViewById(R.id.second_button);
        pgBar = (ProgressBar) findViewById(R.id.progressBar);


        firstButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "First Button was pressed.");
                for (int i = 0; i <= 100; i++) {
                    countProgBarUp(pgBar, i);
                }
            }
        });

        secondButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Second Button was pressed.");

            }
        });

    }

    public void countProgBarUp(ProgressBar pgBar, int counter) {
        try {
            Thread.sleep(100);
            pgBar.setProgress(counter);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
...
}

UI 变得无响应,因为您正在主线程上执行此操作并处于休眠状态。如果您不从 onClick() return 进行,那么主线程将无法处理 UI 更改,例如显示您的新进度。只有主线程可以更新 UI 个组件并绘制它们。因此,它通常被称为 UI 线程。

您可以尝试创建一个 Runnable 来将进度条更新为新的计数。创建绑定到 UI 线程的 Handler 并为 Handler 调用 postDelayed() 并为其提供 Runnable 的实例。然后在 Runnable 中再次 post 只要你还没有达到最大进度。