Несколько дней назад я отправил вопрос о NSThread.Наконец мне удалось каждую минуту запускать его в фоновом режиме.
Цель приложения - получить местоположение и затем вызывать веб-сервис для обновления его на сервере с ASIHTTPRequest каждые X минут.
Код:
- (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, но я хочу сделать мое приложение очень настраиваемым (пользователь сможет установить, как часто они хотят обновлять местоположение и т. Д.), И я понял, что этот метод обновляется каждые 500 м (это не хорошо, яхотите чаще обновлять местоположение).
Что я могу сделать?Любая помощь, пожалуйста?
Большое спасибо!