您的位置:首页 > 移动开发 > IOS开发

iOS应用推到后台继续执行

2015-07-14 16:10 639 查看
@interface AppDelegate : UIResponder <UIApplicationDelegate> {

    __block UIBackgroundTaskIdentifier _bgTask;

}
@property (nonatomic, strong) NSTimer * pushTimer;

@end

在AppDelegate.m中实现

- (void)timerMethod:(NSTimer *)paramSender
{

    

    
}
- (void)applicationDidEnterBackground:(UIApplication *)application {    
    UIDevice * device = [UIDevice currentDevice];
    if([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported])
    {
        self.pushTimer =  [NSTimer scheduledTimerWithTimeInterval:30.0f target:self selector:@selector(timerMethod:) userInfo:nil repeats:YES];

        
        //向iOS系统,借用10分钟(默认就是10分钟)时间。当调用beginBackgroundTaskWithExpirationHandler:
记得必须调用endBackgroundTask:方法,否则iOS会终止你的程序.
        _bgTask = [application beginBackgroundTaskWithExpirationHandler:^
                   {

                    
                       if(_bgTask != UIBackgroundTaskInvalid){
                           [application endBackgroundTask:_bgTask];
                           _bgTask = UIBackgroundTaskInvalid;
                       }
                   }];

        

        

        //如果想提前结束10分钟的后台运行,可在下面加逻辑,目前是空转.
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSInteger remaining = [application backgroundTimeRemaining];
            while (remaining > 30 && _bgTask != UIBackgroundTaskInvalid) {
                sleep(15);
                remaining = [application backgroundTimeRemaining];
                DLog(@"remain %d S", remaining);//iOS 7就只有180秒,但是超过这个时间程序依然可以运行

               
            }
        });
    }

    
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    DLog(@"程序即将进入【前台】");
    if(_bgTask != UIBackgroundTaskInvalid){
        if(_pushTimer!=nil){
            [_pushTimer invalidate];
        }
        [application endBackgroundTask:_bgTask];
        _bgTask = UIBackgroundTaskInvalid;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS后台 运行