Приложение продолжает выполнять сетевые операции после перехода в фоновый режим?

Я просматривал файл отладки, который мое приложение создает во время работы, и увидел странное поведение: приложение использует NSURLConnction для получения некоторых данных с сервера. Соединение было запущено, а затем пользователь перевел приложение в фоновый режим, вероятно, нажав кнопку «Домой» (вызывались методы application:willResignActive и application:didEnterBackground). Я мог видеть, что соединение было обработано в моем коде после вызова application:didEnterBackground. (Делегат connectionDidFinishLoading из NSURLConnection был вызван после application:didEnterBackground). В реализации connectionDidFinishLoading я выполняю какие-то операции, но в этот момент приложение, вероятно, было приостановлено и код не вызывался. Затем, спустя почти 12 часов, пользователь снова запустил приложение (оно не было завершено, а только было в фоновом режиме), и код продолжил работу с того же места, где остановился, даже до того, как были вызваны application:willEnterForeground и application:didBecomeActive). Он делает сцены? Часть кода, запущенная до того, как приложение вышло на передний план, изменило внутреннее состояние моего приложения и вызвало странное поведение.

Любые идеи, как это решить?


person user1513930    schedule 12.08.2012    source источник


Ответы (1)


после того, как вы получите application:didEnterBackground, у вас есть около 5 секунд, чтобы закончить работу, после чего ваше приложение больше не будет планироваться на процессоре.

В вашем случае лучшее решение - объявить о начале фоновой работы через beginBackgroundTaskWithExpirationHandler: и закончить загрузку и сопутствующие задачи.

person Farcaller    schedule 12.08.2012
comment
Спасибо за Ваш ответ. Соединение очень короткое и завершилось до истечения 5-секундного ограничения application:didEnterBackground. Я вижу в файле отладки, что вызывается didEnterBackground, а затем через несколько миллисекунд соединение было разорвано (был вызван didFinishLoading) - person user1513930; 14.08.2012