2013-09-28 15 views
6

Ok, więc szukałem na przykładzie projektu SimpleBackgroundFetch i wykorzystuje następujące w App Delegata:NSURLSession vs Tło Fetch

[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:someTimeInSeconds]; 
//^this code is in didFinishLaunchingWithOptions 


-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    //do something + call completionHandler depending on new data/no data/fail 
} 

Więc zasadniczo I zakładamy, że zadzwonię serwer mojej aplikacji tutaj aby uzyskać trochę danych.

Ale wtedy ujrzałem NSURLSession docs, a on miał metody jak te

– downloadTaskWithURL: 

i powiedział, co następuje:

Ten interfejs API zapewnia bogaty zestaw metod Delegat wspierania uwierzytelniania i daje Twojej aplikacji możliwość wykonywania pobierania w tle, gdy Twoja aplikacja nie jest uruchomiona lub, w iOS, gdy Twoja aplikacja jest zawieszona na .

Więc jaka jest różnica między tymi dwoma API? I co powinienem użyć, jeśli chcę od czasu do czasu pobierać niektóre dane z serwera mojej aplikacji?

Po prostu nie byłem pewien różnicy między tymi dwoma, więc pomyślałem, że powinienem wyjaśnić tutaj wątpliwości. Idź StackOverflow!

Odpowiedz

9

Są to zupełnie różne rzeczy.

  • Tło Fetch: System uruchamia aplikację w pewnym momencie (heurystyka) i twoim zadaniem jest startowym pobierania nowych treści dla użytkownika.

  • NSURLSession: Zamiennik dla NSURLConnection, który pozwala pliki do pobrania do kontynuować po aplikacja jest zawieszona.

+0

Oh ok, dzięki za wyjaśnienie, czasami dokumenty mogą być uciążliwe. Fraza "start/kontynuuj" pomogła mi to zrozumieć.Sądzę więc, że powinienem po prostu użyć stylu Delegowanie aplikacji/Pobieranie w tle. Dzięki! – GangstaGraham

+0

Jeszcze tylko jedna rzecz. Te dwa nie są konieczne w połączeniu. Jeśli parametr _content dla user_ wymaga niewielkich żądań danych, takich jak niektóre aktualizacje kanałów, nie jest dobrze używać trybu _background_ dla NSURLSession. Tryb tła służy głównie do pobierania plików, a takie pobieranie może zostać wstrzymane przez system w razie potrzeby. – Tricertops

+0

Dzięki za dodatkowe informacje. Doceniam to. To po prostu pobiera JSON z serwera, więc pobieranie tła jest w porządku, jak sądzę. – GangstaGraham

3

Delegat aplikacji służy do przechowywania programu obsługi zakończenia, aby można było wywołać go po zakończeniu pobierania.

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler { 
    NSLog(@"Handle events for background url session"); 

    self.backgroundSessionCompletionHandler = completionHandler; 
} 

i wywołania obsługi

- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { 
    WebAppDelegate *appDelegate = (WebAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    if (appDelegate.backgroundSessionCompletionHandler) { 
     void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler; 
     appDelegate.backgroundSessionCompletionHandler = nil; 

     completionHandler(); 
    } 
    NSLog(@"All tasks are finished"); 
} 
0

Tak, aby potwierdzić tło URLSession wyposażony w delegata powinny być wywoływane, a normalna dataTask z bloku nie może być?

0

NSURLSession: Pozwala na przesyłanie i pobieranie w trybie tła i sposób stosowania zawiesić

Tło Fetch: Happens według objętości danych i czasu trwania wcześniejszych danych przenoszących process.Only trwać 30s .