In una delle mie app, stavo caricando enormi quantità di dati. Non posso assolutamente aspettarmi che l'utente tenga l'app in primo piano fino al download dei dati. Uso il seguente codice per scaricare i dati mentre l'app è in background.Il suo lavoro correttamente :-)
prega di passare attraverso passaggi seguenti:
1) utilizzare seguente riga nel file di intestazione di ViewController
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
sintesi nel file di .m.
2) in viewDidLoad assegno UIBackgroundTaskIdentifier come:
self.backgroundTask = UIBackgroundTaskInvalid;
3) Uso seguente riga di codice, qui sto solo mantenendo sulla metodo getDataFromServer all'interno beginBackgroundTaskWithExpirationHandler: blocco.
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
/* Here your downloading Code, let say getDataFromServer method */
[self getDataFromServer]; // Its dummy method
/* Your downloading Code End Here */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
});
4) Se si desidera controllare il tempo rimanente per scaricare i dati in background, includere seguente riga nel applicationDidEnterBackground: (UIApplication *) metodo delegato applicazione di AppDelegate:
NSLog(@"Background time remaining = %.1f seconds", [UIApplication sharedApplication].backgroundTimeRemaining);
fonte
2013-09-27 06:37:40
finalmente sei riuscito a scaricare quel file in background? – Mahesh
Vedere la risposta di MMR di seguito. Lo sfondo reale 'NSURLSession' è il modo migliore per ottenere questo al giorno d'oggi. Tutte queste altre risposte precedono questa tecnica. Se hai un piccolo download che richiede meno di 3 minuti per terminare, l'attività in background è un buon approccio, ma per i grandi download in background, usa lo sfondo 'NSURLSession'. – Rob