Swift实现(在AppDelegate对应的方法中添加如下代码)
funcapplicationDidEnterBackground(application:UIApplication) {
//创建一个定时器
timer=NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector:Selector("logAgain:"), userInfo:nil, repeats:true)
//添加到主runloop中
NSRunLoop.mainRunLoop().addTimer(timer!, forMode:NSDefaultRunLoopMode)
letapp =UIApplication.sharedApplication()
//如果后台任务关闭,就从新开启
varbgTask:UIBackgroundTaskIdentifier? =UIBackgroundTaskInvalid
bgTask = app.beginBackgroundTaskWithExpirationHandler{ () ->Voidin
dispatch_async(dispatch_get_main_queue(), { () ->Voidin
ifbgTask !=UIBackgroundTaskInvalid{
bgTask =UIBackgroundTaskInvalid
}
})
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () ->Voidin
ifbgTask !=UIBackgroundTaskInvalid{
bgTask =UIBackgroundTaskInvalid
}
})
}
}
//进入前台,关闭timer
funcapplicationWillEnterForeground(application:UIApplication) {
iftimer!=nil{
timer?.invalidate()
timer=nil
}
}
//timer的执行函数
funclogAgain(timer:NSTimer){
print("hello world")
}
OC实现(在AppDelegate对应的方法中添加如下代码)
- (void)applicationDidEnterBackground:(UIApplication *)application {
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(logAgain:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
UIApplication* app = [UIApplication sharedApplication];
self.bgTask = UIBackgroundTaskInvalid;
__weak __typeof (&*self)weakSelf = self;
self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (weakSelf.bgTask != UIBackgroundTaskInvalid) {
weakSelf.bgTask = UIBackgroundTaskInvalid;
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (weakSelf.bgTask != UIBackgroundTaskInvalid) {
weakSelf.bgTask = UIBackgroundTaskInvalid;
}
});
}];
}
- (void)logAgain:(NSTimer*)timer{
//无限后台
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
if (self.timer != nil) {
[self.timer invalidate];
self.timer = nil;
}
}