Sam
Sam

Reputation: 11

Stop Timer when Activity loses focus

I have a Timer which executes a TimerTask every 30 seconds. I only want the timer to launch a new TimerTask if the Activity is displayed i.e. if the user receives a phone call or launches a new activity the Timer will stop. I then need the Timer to restart when the Activity is re-launched and comes into focus.

Now this should be easy, I override the "onWindowFocusChanged(boolean hasFocus)" method and either start or stop the timer depending on the value of hasFocus. The way I start the timer is to create a new Timer object and TimerTask each time and the way I stop the Timer is to call the cancel() method on the Timer object and set timer to null.

My problem is this doesn't always work, if I launch the activity which has the Timer and switch orientations quickly (to start/stop the Activity) I find the Timer is not always cancelled and I end up with multiple Timers launching TimerTasks at an ever increasing rate.

Am I missing something obvious here? Any help would be greatly appreciated.

Thanks

Upvotes: 1

Views: 1967

Answers (2)

Jake
Jake

Reputation: 1

I had a similar problem, I ended up using post delayed in a Thread and avoided a Timer. Not really a fix though.

Upvotes: 0

anewbie
anewbie

Reputation: 11

When I see this, it's because I'm creating 2 CountDownTimers in my app. Because each timer can only read messages of type "1" [see http://www.devdaily.com/java/jwarehouse/android/core/java/android/os/CountDownTimer.java.shtml ], it appeared that I only had 1 timer while my app was running normally. I put a "timer.cancel()" in my onDestroy that took care of one of the timers, allowing the other timer to start receiving all the timing messages--long after the onDestroy had returned.

Canceling any existing timer before creating another took care of the lingering timer.

Upvotes: 1

Related Questions