Android计时器正在触发两次

时间:2014-06-11 09:52:39

标签: android timer android-ui timertask

我正在尝试使用Timer Class每秒更新TextView内容。以下是我的代码。问题是该值增加2而不是1.请告诉我问题是什么。

public class MainActivity extends ActionBarActivity {

    public void onButtonClick (View view) {
        // calendar 
        OnDateSetListener datelistener = new OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int Year, int monthOfYear, int dayOfMonth) {
                                ....
                reScheduleTimer(); // starting the timer
            }
        };
    }

    public void reScheduleTimer(){
        timer = new Timer();
        timerTask = new myTimerTask();
        timer.schedule(timerTask, 1000, 1000);
    }
    public class myTimerTask extends TimerTask{
        @Override
        public void run() {
            elapsed = elapsed + 1;

            runOnUiThread(new Runnable(){
             public void run() {
                    TextView seconds = (TextView) findViewById(R.id.seconds);
                    seconds.setText("seconds so far "+elapsed);
                }
            });
        }
    }
}

2 个答案:

答案 0 :(得分:0)

timerTask的开头检查reScheduleTimer是否为空并且如果它不为空则取消它是不会有害的。

在reScheduleTimer的开头:

    if(timerTask != null) {
        timerTask.cancel();
    }

答案 1 :(得分:0)

我仍然不知道变量如何增加超过1,但我通过在每次调用函数时读取系统时钟并显示它来解决问题。