0

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

Это что-то, что я мог бы внести в applicationDidEnterBackground?

ответ

0

Вы можете сделать это в dispatch_async, и вы можете ждать ответа сервера и сделать что-то с вашими данными, но вы не можете остановить ввести фон ...

попробовать этот код

dispatch_queue_t savingQueue = dispatch_queue_create("savingQue", NULL); 
dispatch_async(savingQueue, ^{ 

    //do something in bg.... 

    dispatch_async(dispatch_get_main_queue(), ^{ 


    }); 

}); 
dispatch_release(savingQueue); 
+0

Thats sound fine. – Geri

+0

Достаточно ли его освободить даже в ARC? – Geri

+0

Кажется, нет. Я думаю, что это будет выпущено позже. – Geri

1

Если вы хотите делать какие-либо сетевые материалы перед тем, как идти на задний план, вы должны попросить дополнительное время с beginBackgroundTaskWithExpirationHandler:.

5

Согласно библиотеки разработчика IOS UIApplicationDelegate Protocol Reference

Ваша реализация этого метода есть примерно пять секунд до выполнять любые задачи и возвращения. Если вам нужно дополнительное время для выполнения любых конечных задач, вы можете запросить дополнительное время от системы , вызвав startBackgroundTaskWithExpirationHandler :. В практике вы должны вернуться из приложенияDidEnterBackground: как быстро, насколько это возможно. Если метод не возвращается до истечения времени , ваше приложение прекращается и очищается из памяти.

Вы должны выполнить любые задачи, связанные с настройки пользовательского интерфейса перед этим методом выходов, но и другие задачи (например, сохранение состояния) должны быть перемещены в параллельной очереди отправки или вторичных потоков по мере необходимости. Потому что, скорее всего, любые фоновые задачи, которые вы запускаете в applicationDidEnterBackground: не запускаются до тех пор, пока после этого метода не выйдет, вы должны запросить дополнительное время выполнения фона до , начиная с этих задач. Другими словами, сначала вызовите beginBackgroundTaskWithExpirationHandler: затем запустите задачу в очереди отправки или вторичной нити .

Так у вас есть примерно 5 секунд для выполнения любых задач и вернуться в методах «applicationDidEnterBackground».