iphone – NSTimers в фоновом режиме

Я разрабатываю приложение, которое должно работать в фоновом режиме. Это приложение, основанное на местоположении, поэтому оно работает все время, ОС не убивает его.

Он должен отправлять некоторую информацию каждые 10 секунд (только для отладки), я устанавливаю таймер один раз в фоновом режиме. Я установил точку останова в функции, которая должна выполняться каждые 10 секунд, которая никогда не вызывается, но если я приостанавливаю приложение, а затем продолжаю вызывать таймер, а затем таймер выполняется каждые 10 секунд без проблем, странно?

Я думал, что таймер будет выполняться в любом случае, когда я не отлаживаю, но это не так, как если бы я не приостанавливал отладку.

Мой вопрос: ПОЧЕМУ ??? Таймер установлен правильно (я предполагаю), так как он работает после паузы, но это не так.

Есть идеи?

Способ установки таймера:

self.timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(doStuff) userInfo:nil repeats:YES]; 

И в функции я подключаюсь к веб-сервису.

Благодарю.

У меня есть аналогичный дизайн приложения и он застрял на одном и том же. То, что я нашел где-то в Интернете, добавляет этот тип заявления applicationDidEnterBackground:

  UIBackgroundTaskIdentifier locationUpdater =[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication sharedApplication] endBackgroundTask:locationUpdater]; locationUpdater=UIBackgroundTaskInvalid; } ]; 

Это говорит о том, что у вас все еще есть вещи, и не останавливать их.

У меня есть таймер, прикрепленный к этой функции

  //this is a wrapper method to fit the required selector signature - (void)timeIntervalEnded:(NSTimer*)timer { [self writeToLog:[NSString stringWithFormat:@"Timer Ended On %@",[NSDate date]]]; [self startReadingLocation]; [timer invalidate]; timer=nil; } 

Я установил таймер в своих методах делегирования менеджера моего местоположения.

Я чувствую твою боль. Я обнаружил, что эти вещи были супертонкими. Это то, что сработало для меня. Я надеюсь, что это помогает. Я обнаружил, что нет никаких ограничений в том, что вы можете сделать в фоновом режиме.

Могут быть ограничения на то, что вы можете сделать в фоновом режиме. Попробуйте добавить таймер в цикл выполнения, прежде чем идти в фоновый режим. Даже это может не сработать; может быть, что единственный ваш код, который может работать в фоновом режиме, – это код, вызываемый методами Core Location, для которых вы зарегистрировались (например, locationManager:didUpdate... ). Но у меня сложилось впечатление, что таймеры, уже запущенные до того, как вы начнете идти в фоновый режим, будут продолжать работать.

  • Как определить, было ли приложение .NET скомпилировано в режиме DEBUG или RELEASE?
  • Как вы отлаживаете хранимые процедуры MySQL?
  • В Visual Studio C ++, каковы представления распределения памяти?
  • Отладка нескольких streamов в eclipse
  • Как отладить многопоточное приложение в IntelliJ?
  • Отладка JBoss в Eclipse
  • Как я могу сделать что-то, что ловит все «необработанные» исключения в приложении WinForms?
  • Отладка iframe с помощью инструментов разработчика Chrome
  • Как отлаживать проблемы с Ansible?
  • Есть ли известная проблема, связанная с символами ядра Windows 7?
  • Как избежать доступа к изменяемой переменной из закрытия
  • Давайте будем гением компьютера.