在循环不工作时延迟内部

时间:2017-07-13 17:58:34

标签: java android multithreading delay

我正在尝试使用Thread.sleep()方法在循环内部进行延迟。这是我的代码:

 new Thread(new Runnable() {
                    @Override
                    public void run() {
                            z=0;
                        while (z<45){
                            z++;

                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    time.setText(Integer.toString(45-z));


                                }
                            });

                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();

                            }



                        }


                    }
                }).start();

此代码正常运行,突然出现问题。它开始延迟不到一分钟,总计500毫秒,并且总和小于

2 个答案:

答案 0 :(得分:1)

相反,如果使用不同的线程,Thread.sleep(),Handler和while循环,你只能尝试使用这样的Handler,

private int timerCount = 0;

private static Handler myHandler = new Handler();

private void runVVRunnable() {
    myHandler.postDelayed(runnable, 1000);
}

private Runnable runnable = new Runnable() {

    @Override
    public void run() {
        timerCount++;

        if ((time == null)) {
            return;
        }

        if (timerCount <= 45) {
            time.setText(Integer.toString(timerCount));

            runVVRunnable();
        }
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();

    myHandler.removeCallbacks(runnable);
}

你可以调用runVVRunnable()它将执行与循环

相同的过程

答案 1 :(得分:0)

只是一个猜测但是在睡眠/等待Java线程时你需要尝试捕获 foreach (char name in CharName) { Console.WriteLine(name); }

当“某人”在您的主题上调用InterruptedException时,会抛出此异常。

这将导致线程早于预期从睡眠中唤醒。

检查在线程终止之前是否抓住interrupt()