我有我使用,以保持我的应用程序留在背景状态,它工作得很好在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秒左右。 该应用程序会保持在后台运行,甚至当我运行其他应用程序,我看到我的应用程序发送通知。
但是,这是不会发生的设备上。 它看起来像该操作系统杀死应用程序只是后的第一个通知是发送和我没有看到,我希望以后看到更多的后续通知?
有没有别的东西,我需要做的,以保持在后台运行的应用程序?