Timer should run One time but with different Intervals
Matthew Martinez
I have a button on which I want to set the timer for 5 seconds for the first time and it should perform some task after completing 5 seconds. Also if user click button 2 times it should start timer for 10 seconds and after 10 seconds it should perform specific task. and if user click 3rd time it should stop all running timers. so I have do not know How to implement timer for one time what I have search is this. But in this link it is continuously repeating after specific period of time, whereas I want to run once.
Now what I want
- To start timer with first click (of 5 seconds)and if meanwhile user click 2nd time it should set timer with with new time period and if user click third time it cancels out all timers.
- I do not want to use Thread timer using sleep method.
- I want same behavior as there is in camera app in android 5.0 v.
So please tell me how to do this any code and source code would be appreciated.
1 Answer
In the link you provided you will find the answer if you try little harder.
For a repeating task:
new Timer().scheduleAtFixedRate(task, after, interval);For a single run of a task:
new Timer().schedule(task, after);So what you need to do is to maintain temporary variable to keep track of number of clicks and you can use second method like
For a repeating task:
new Timer().scheduleAtFixedRate(task, after, interval);
For a single run of a task:
new Timer().schedule(task, after * numberOfTimeBtnClked);You have to pass the TimerTask method instead of task in that method.
**For updating your textview use below code and forget about whatever I have written above **
public void startTimer() { //set a new Timer timer = new Timer(); //initialize the TimerTask's job initializeTimerTask(); //run in an interval of 1000ms timer.schedule(timerTask, 0, 1000); //
}
public void initializeTimerTask() { timerTask = new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { timerSince++; //global integer variable with default value 0 if(timerSince == 5 * numberOfBtnClick){ //call your method timer.cancel; timerSince = 0; }else{ //textView.setText(((5 * numberOfBtnClick)-timerSince)+" second left"); } }); } }; }
}On event start button click call:
startTimer(); 13