iphone – NSTimers в фоновом режиме
Я разрабатываю приложение, которое должно работать в фоновом режиме. Это приложение, основанное на местоположении, поэтому оно работает все время, ОС не убивает его.
Он должен отправлять некоторую информацию каждые 10 секунд (только для отладки), я устанавливаю таймер один раз в фоновом режиме. Я установил точку останова в функции, которая должна выполняться каждые 10 секунд, которая никогда не вызывается, но если я приостанавливаю приложение, а затем продолжаю вызывать таймер, а затем таймер выполняется каждые 10 секунд без проблем, странно?
Я думал, что таймер будет выполняться в любом случае, когда я не отлаживаю, но это не так, как если бы я не приостанавливал отладку.
- Как отлаживать время ожидания ожидания ожидания ожидания на сервере MySQL?
- Как отступить в отладчике Eclipse?
- Печать коллекций Java Nicely (toString не возвращает довольно вывод)
- Как отлаживать проекты библиотеки внешних classов в visual studio?
- Получение состояния переменных после ошибки в R
Мой вопрос: ПОЧЕМУ ??? Таймер установлен правильно (я предполагаю), так как он работает после паузы, но это не так.
Есть идеи?
Способ установки таймера:
self.timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(doStuff) userInfo:nil repeats:YES];
И в функции я подключаюсь к веб-сервису.
Благодарю.
- Как я могу отлаживать приложения в Java Web Start (JNLP)?
- Chrome: Uncaught SyntaxError: Неожиданный конец ввода
- Что такое отладчик и как он может помочь мне диагностировать проблемы?
- Как я могу заставить gdb сохранить историю команд?
- Где узнать о VS отладчике «волшебные имена»
- Прикрепить отладчик к экземпляру IIS
- Может ли атрибут DebuggerDisplay применяться к типам, которые не принадлежат?
- Что произойдет, если Android-приложение будет выпущено с возможностью отладки?
У меня есть аналогичный дизайн приложения и он застрял на одном и том же. То, что я нашел где-то в Интернете, добавляет этот тип заявления 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...
). Но у меня сложилось впечатление, что таймеры, уже запущенные до того, как вы начнете идти в фоновый режим, будут продолжать работать.