3

几天前,我发布了一个关于 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 更新一次(这不好,我想要更频繁地更新位置)。

我能做什么?请问有什么帮助吗?

非常感谢!

4

0 回答 0