Mani
Mani

Reputation: 1310

How to run the timer in background of the application?

I want to reduce the count down of the time. So If the user minimize app then app loading the background. How can run the timer in application background? I am using the below code. When app is minimized timer is stopped. Please help me.

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerCountDown) userInfo:nil repeats:YES];

- (void)timerCountDown
{
    if(secondsLeft > 0 ) {
        secondsLeft -- ;
        hours = secondsLeft / 3600;
        minutes = (secondsLeft % 3600) / 60;
        seconds = (secondsLeft %3600) % 60;
    }
}

Upvotes: 4

Views: 6603

Answers (2)

Mani
Mani

Reputation: 1310

I got the answer, its working perfectly.

UIBackgroundTaskIdentifier bgTask =0;
UIApplication  *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
}];

timer = [NSTimer
               scheduledTimerWithTimeInterval:1.0
               target:self
               selector:@selector(timerCountDown:)
               userInfo:nil
               repeats:YES];

Upvotes: 29

WDUK
WDUK

Reputation: 19030

Applications don't run in the background forever; you can't guarantee that the timer will continue when the app is closed.

In the app delegate, within applicationDidEnterBackground, save any data that allows the timer to continue when the applicationWillEnterForeground. In your particular case, invalidate the timer on backgrounding, and start it up again on it entering the foreground. With your secondsLeft, you may want to be able to calculate that via a difference in NSDates, and save the start and end dates.

Upvotes: 6

Related Questions