【发布时间】:2017-02-28 18:50:53
【问题描述】:
我想运行一个后台任务。用于检查网络连接,甚至是后台应用程序
-(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分钟。
【问题讨论】:
-
您不能在后台启动计时器。
-
@matt : 有没有办法从后台检查网络状态至少 30 分钟。
-
为什么需要这样做?如果您的应用程序在后台,则它没有运行,并且网络状态对您来说无关紧要。如果您尝试进行后台上传/下载或尝试在后台调用以执行网络任务,那么有很多方法可以做到这一点。但你的代码不是。
-
根据我的要求,如果电话互联网连接在 30 分钟后丢失,我需要以本地推送通知的形式通知用户。
-
你不能,除非你的应用已经因为其他原因在后台运行。而且,正如我已经说过的,这似乎是一个非常没有意义的要求。
标签: ios objective-c iphone background