我有一些测试代码用于让我的应用程序保持在后台状态下运行,这在 iOS 5.1 模拟器上运行良好,但在实际设备上表现不佳。
现在我已经知道我必须遵循的要求,所以我将“背景模式”设置为 voip 和位置。
在我的委托的 applicationDidEnterBackground 方法中,我正在调用以下函数,我称之为“doBackgroundActivity()”来请求应用程序在后台完成一些长时间运行的任务的时间:
-(void) threadedMethod{
while(true){
NSLog(@"looping");
[self showLocalNotification:@"This notification will come every 2 min. if the app is running in background. Close it!"];
[NSThread sleepForTimeInterval: (5)]; // 60 sec = 1 min
}
}
-(void) doBackgroundActivity{
self->_backgroundTask = [ [UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask: self->_backgroundTask];
self->_backgroundTask = UIBackgroundTaskInvalid;
}
];
[self threadedMethod];
[[UIApplication sharedApplication] endBackgroundTask:self->_backgroundTask];
self->_backgroundTask = UIBackgroundTaskInvalid;
}
如您所见,doBackgroundAcitivity() 只是调用 threadedMethod() 并且所做的只是运行一个无限循环,该循环每 5 秒左右发送一次本地通知。
现在在模拟器中,当我运行它并最小化应用程序时,我每隔 5 秒左右就会看到一个通知。即使当我运行其他应用程序时,应用程序也会继续在后台运行,我看到我的应用程序正在发送通知。
但这不会在设备上发生。看起来操作系统在发送第一个通知后立即终止了应用程序,并且我没有看到我希望稍后看到的任何后续通知?
我还需要做些什么来让应用程序在后台运行吗?