几天前,我发布了一个关于 NSThread 的问题。最后我设法让它每分钟在后台运行。
该应用程序的目的是获取位置,然后调用 Web 服务以每 X 分钟使用 ASIHTTPRequest 在服务器上更新它。
编码:
- (void)threadEntryPoint:(ActualizarPosicionGPS2AppDelegate *)paramSender{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
while([[NSThread currentThread] isCancelled] == NO){
[NSThread sleepForTimeInterval:60.0f];
if ([[NSThread currentThread] isCancelled] == NO &&
[[UIApplication sharedApplication] backgroundTimeRemaining] != DBL_MAX) {
[self hacerCosasBackground];
}
}
[pool release];
}
hacerCosasBackground 调用 locationManager 更新它的位置,然后将位置上传到服务器。
在应用程序中:didFinishLaunchingWithOptions:
[NSThread detachNewThreadSelector:@selector(threadEntryPoint:) toTarget:self withObject:self];
-(void) endTaskWidthIdentifier:(NSNumber *)paramIdentifier{
UIBackgroundTaskIdentifier identifier = [paramIdentifier integerValue];
[[UIApplication sharedApplication] endBackgroundTask:identifier];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
NSNumber *backgroundTask = [NSNumber numberWithInteger:self.backgroundTaskIdentifier];
[self performSelectorOnMainThread:@selector(endTaskWidthIdentifier:) withObject:backgroundTask waitUntilDone:YES];
self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}];
}
但是,NSThread 在关闭应用程序后大约 10 分钟就死掉了。我已经在 info.plist 中注册了“UIBackgroundModes”位置。我还阅读了有关 startMonitoringSignificantLocationChanges 的信息,但我想让我的应用程序非常可配置(用户将能够设置他们想要更新位置的频率等)并且我知道该方法每 500m 更新一次(这不好,我想要更频繁地更新位置)。
我能做什么?请问有什么帮助吗?
非常感谢!