后台任务在3分钟后停止

时间:2017-02-28 18:50:53

标签: ios objective-c iphone background

我想运行后台任务。用于检查网络连接甚至是后台应用程序

-(void) beginBackgroundUploadTask
{
    isBackGroundRunning = YES;
    if(self.backgroundTask != UIBackgroundTaskInvalid)
    {
        [self endBackgroundUploadTask];
    }

    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

        NSLog(@"Background Time Remaining :%f",[[UIApplication sharedApplication] backgroundTimeRemaining]);

    }];
}

-(void) endBackgroundUploadTask
{
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask ];
    self. backgroundTask = UIBackgroundTaskInvalid;
}

-(void) initializeUpdateTimer
{
    a= 0;
    [self.updateTimer invalidate];
    self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:5
                                                            target:self
                                                          selector:@selector(checkNetWorkStatus)
                                                          userInfo:nil repeats:YES];
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground){

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

                [[NSRunLoop currentRunLoop] addTimer:self.updateTimer forMode:NSDefaultRunLoopMode]; //NSDefaultRunLoopMode
                [[NSRunLoop currentRunLoop] run];
            });

        }
    }];
}

当应用程序进入后台时我是initializeUpdateTimer函数。 任务在3分钟后自动停止。 是否可以将时间延长30分钟。

1 个答案:

答案 0 :(得分:0)

一旦您的应用暂停,无法检查互联网是否可用,通常iOS会在3分钟内暂停应用,但这取决于操作系统。但这是一种黑客的方式

  1. 如果你需要知道,你的应用是否醒着或者没有尝试使用静音推送通知,
  2. 如果您收到静音推送设置30或更多的本地通知,如果您收到另一个静音推送通知,请从其计划中删除本地通知,
  3. 如果无声推送从未到达,请让本地通知完成其工作。
  4. 它是我实现您的要求的方式,但它从未被推荐过,我也没有。