Android计时器速度提升

时间:2014-05-05 11:42:53

标签: java android thread-sleep

我对Android很新,我对计时器有点麻烦。它最初工作正常,但每次我点击按钮重新启动它,速度会增加。所以在一段时间内它开始很快。

有人可以告诉我如何防止这种情况:

if (game_start==false) {
    game_start=true;

    textfield=(TextView)findViewById(R.id.TVTimer);
    handler=new Handler();
    Runnable runnable = new Runnable () {

        @Override
        public void run(){
            while(Running){
                try{
                    Thread.sleep(1000);
                } catch(InterruptedException e){
                    e.printStackTrace();
                }
                handler.post(new Runnable(){

                    @Override
                    public void run(){
                        number=number+1;
                        time_done=number-prev_time;
                        System.out.println("timer" + time_done);
                        // textfield.setText(String.valueOf(number));
                    }
                });

            }
        }
    };
    new Thread(runnable).start();
}           

3 个答案:

答案 0 :(得分:1)

实际上onClick一个新的线程实例启动并使用数字& prev_time 超出线程范围的变量。要防止这种情况,只需重置数字&的值。点击按钮时的 prev_time 变量。

答案 1 :(得分:0)

看一下java.util.Timer.scheduleAtFixedRate()

答案 2 :(得分:0)

您是否先取消原来的Runnable?您应该使用属性存储对Runnable的引用,并在开始或启动计时器之前调用Handler.removeCallbacks (yourHandlerHere)

此外,我建议您仅使用HandlerRunnable作为计时器而不是Thread(除非您真正强调强调必须)