多次使用Thread来更新UI

时间:2014-06-26 10:01:46

标签: java android multithreading

我写了一些计时器。并且我想在单击开始按钮后在textview中显示它。 我做了什么。 每次我

timer = new Thread(new Runnable() {
            @Override
            public void run() {

                while (!stopedButton ) {

                    time = "";
                    if (timerMinutes >= 60) {
                        timerMinutes = 0;
                        timerHours++;
                    }

                    if (timerHours < 10)
                        time = "0" + String.valueOf(timerHours) + ":";
                    else
                        time = String.valueOf(timerHours) + ":";
                    if (timerMinutes < 10)
                        time += "0" + String.valueOf(timerMinutes);
                    else
                        time += String.valueOf(timerMinutes);
                    runOnUiThread(new Runnable() {
                        public void run() {
                            if (!stopedButton) {
                                mTimeFromStartValue.setText(time);
                                timerMinutes++;
                            } else {
                                timerMinutes = 0;
                                timerHours = 0;
                            }
                        }

                    });
                    Log.e(TAG, ""+timerHours);
                    Log.e(TAG, ""+timerMinutes);
                    Log.e(TAG, time);
                    try {
                        Thread.sleep(1 * 1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        });

所以它工作正常,但每次停止后再开始,经过多次我的计时器开始快速工作。我试图避免这种情况,我认为我不需要每次都创建新的计时器。但是我也需要在停止启动后有工作计时器。

我写了一些这样的代码:

    if(timer.isAlive()){
        timer.resume();
    }else{
        timer.start();
    }

但我有这个例外:java.lang.IllegalThreadStateException: Thread already started

那怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

您需要创建新的Thread实例才能启动新线程。您还需要使用interrupt()类的Thread方法。

使用此代码完成您的主题:

@Override
public void run() {

    while (true) {

        // Your code here

        if(isInterrupted ()){
            return;
        }
    }

}

单击停止按钮时使用此代码:

timer.interrupt();
timer.join();