Android线程按钮睡眠

时间:2010-12-29 18:44:09

标签: android multithreading button click handler

对于我的项目,当我点击“A”按钮时,我每隔10秒尝试执行一次方法 当我再次点击按钮时(应该打开/关闭)它应该停止。

这是我达到的目的: - /:

  ButtonA.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {               

                        Handler handler = new Handler(); 
                    handler.postDelayed(new Runnable() { 
                         public void run() { 
                             showCurrentLocation();
                                Methodexecute();

                         } 
                    }, 10000); 
                }

                    }
        });

如何每隔10秒重复执行此方法,直到再次单击该按钮?

感谢

3 个答案:

答案 0 :(得分:1)

考虑使用带TimerTask的Timer,每隔10秒进行一次调度。 我希望这会奏效:

Timer timer = new Timer();
    TimerTask task = new TimerTask() {

        @Override
        public void run() {
            //insert your methods here
        }
    };

    boolean taskIsRunning = false;
    if(taskIsRunning){
        timer.cancel();
        taskIsRunning = false;
    } else {            
        timer.schedule(task, 0, 10000);
        taskIsRunning = true;
    }

答案 1 :(得分:1)

handler = new Handler();
ButtonA.setOnClickListener(new OnClickListener() {
    @Override public void onClick(View v) {

            handler.postDelayed(new Runnable() { 
                 public void run() {
                     if(taskIsRunning){
                         showCurrentLocation();
                         Methodexecute();
                         handler.postDelayed(this,10000);
                     }
                 } 
            }, 10000); 
        }
    }
});

答案 2 :(得分:0)

在onClick方法中,您还可以像这样切换计时器任务:

...
@Override public void onClick(View v) {
     ...
     toggleTask();
     ...
}
...

然后,从Jonathan的代码中,类似

boolean taskIsRunning = false;
Timer timer;
TimerTask task = new TimerTask() {
    @Override
    public void run() {
        //insert your methods here
    }
};
private void toggleTask() {
    if(taskIsRunning){
        timer.cancel();
        taskIsRunning = false;
    } else {  
        timer = new Timer()          
        timer.schedule(task, 0, 10000);
        taskIsRunning = true;
    }
}