Android:更新UI的循环中的时间延迟

时间:2012-01-11 11:44:51

标签: android loops time delay progress

我正在尝试创建的是一个简单的进度条,可以加载~10秒。 所以我想要的是像这样的for循环:

for(int i = 1; i <= 100; i++) {
                    progressDialog.setProgress(i);
                    //100ms delay
                }

由于

4 个答案:

答案 0 :(得分:3)

您可以将Async Task用于此目的

preExecute()方法中的

将循环索引初始化为0;

在后台进程中休眠线程10秒,然后调用sendUpdate方法发送进度

在postExecute更新进度条中

进入参数。

答案 1 :(得分:1)

以下代码可能对您有所帮助。

public void startProgress(View view) {
    // Do something long
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i <= 10; i++) {
                final int value = i;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog.setProgress(value);
                    }
                });
            }
        }
    };
    new Thread(runnable).start();
}

答案 2 :(得分:0)

最好使用AsyncTask,它可以在没有任何循环的情况下处理进度。

答案 3 :(得分:0)

不显式创建新线程的较短解决方案如下所示:

final Handler handler = new Handler(Looper.getMainLooper());
final int sleepMs = 100;
for (int i = 1; i <= 100; ++i) {
    handler.postDelayed(() -> progressDialog.setProgress(value), i * sleepMs);
}