Продолжить загрузку в фоновом режиме
Я создаю приложение, в котором загружаю некоторые данные с сервера. Во время работы в фоновом режиме я хочу, чтобы это соединение продолжало работать, так что данные могут быть загружены. Я знаю, что есть метод в appDelegate
- (void)applicationDidEnterBackground:(UIApplication *)application
, который вызывается, когда приложение переходит в фоновый режим. Но поскольку соединение создается в viewController, как им можно управлять в appDelegate ?
Также есть / есть ли другой способ(ы) это можно сделать? Я прошел через это. это ссылка но есть ли что-то простое для реализации?
3 ответа:
Один из способов выполнить некоторые операции, которые продолжаются в фоновом режиме, - создать отдельный поток для загрузки. Внутри потока заключите операции загрузки в скобки между вызовами beginBackgroundTaskWithExpirationhandler: и endBackgroundTask. Вам не нужно проверять, работаете ли вы в фоновом режиме или нет, вы просто всегда вызываете эти два метода.
// Tell iOS this as a background task in case we get backgrounded UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; //---------------------------------------------- // Perform your download operations here //---------------------------------------------- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // Tell iOS that we are done with stuff that needed to keep going even if backgrounded [[UIApplication sharedApplication] endBackgroundTask:taskId];
[править] Извините, что я был неправ, как было указано в комментариях, вы можете продлить время, необходимое для выполнения операций один раз/до того, как ваше приложение перейдет в фоновый режим. Вот официальная документация Apple
Я не знаю, как именно вы обрабатываете загрузку данных. Но вы можете взглянуть на ASIHTTPRequest. Он очень прост и понятен и работает с ARC, если вы установите флаги компилятора в -fno-objc-arc. С этим вам нужно только использовать
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up
И это работает.
Здесь Вы можете увидеть, как работает ASIHTTPRequest
Надеюсь, это поможет!