Обратные вызовы NSTimer, когда приложение iPhone неактивно - PullRequest
5 голосов
/ 22 мая 2009

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

В документации конкретно говорится, что, хотя приложение неактивно, оно выполняет, но не отправляет входящие события (я не даю ссылку, потому что я нервничаю по поводу NDA - следует ли мне расслабиться? нарушение? вздох ).

Кроме того, два ответа пользователя "Ambr Str" прямо заявляют, что можно продолжать получать обратные вызовы по таймеру, и он предоставляет фрагмент кода для его достижения (я не могу связать это, потому что я новый пользователь, извините - найдите вопрос: «Что происходит с приложением iPhone, когда iPhone переходит в режим ожидания?», чтобы найти его ответ).

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

Я только что заметил, что, пока iPhone подключен, если приложение становится неактивным (из-за простоя или из-за того, что я нажимаю кнопку ожидания), обратные вызовы продолжают происходить - возможно, я должен заставить своих пользователей носите с собой батарейный блок; -)

Ответы [ 2 ]

2 голосов
/ 22 мая 2009

На форумах Apple есть хороший ответ на этот вопрос. Ищите «Таймер» и «Эскимос» (полезный парень, который дает ответы).

Короче говоря, вскоре после того, как приложение становится неактивным, телефон действительно переходит в режим сна. Единственный способ предотвратить это - воспроизвести звук (или звук, который будет воспроизводиться в фоновом приложении). Во время воспроизведения звука телефон не будет спать, а приложение продолжает работать.

Предполагается, что воспроизведение звука без сна - это взлом, и вам не следует делать это, если это вообще возможно. Я думаю, что в моем приложении (которое выполняет воспроизведение звука, перемежающееся с периодами тишины), подход является правильным, если не идеальным!

0 голосов
/ 23 сентября 2009

У меня есть приложение. который включает в себя встроенный веб-сервер. Я планирую предложить опцию отключения автоматического режима ожидания, если сервер включен, а устройство включено. Так что вы можете рассмотреть проверку свойства batteryState UIDevice. Поэтому, если batteryState! = UIDeviceBatteryStateUnplugged, продолжайте и отключите таймер простоя. (примечание: в документах говорится, что UIDeviceBatteryStateUnknown будет возвращено в симуляторе.)

Вы также захотите прослушать уведомления UIDeviceBatteryStateUnplugged и соответствующим образом установить batteryMonitoringEnabled.

...