2013-09-28 177 views
6

Ok, vì vậy tôi đã nhìn vào dự án ví dụ SimpleBackgroundFetch, và nó sử dụng như sau trong App đại biểu:NSURLSession vs nền 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 
} 

Vì vậy, về cơ bản tôi giả sử, mà tôi gọi là máy chủ ứng dụng của tôi ở đây, để lấy một số dữ liệu.

Nhưng sau đó tôi thấy NSURLSession docs, và nó có phương pháp như thế này

– downloadTaskWithURL: 

và nó nói như sau:

API này cung cấp một tập hợp phong phú các phương pháp đại biểu đã ủng hộ xác thực và cung cấp cho ứng dụng của bạn khả năng thực hiện các lượt tải xuống nền khi ứng dụng của bạn không chạy hoặc trong iOS, trong khi ứng dụng của bạn là bị tạm ngưng.

Vậy sự khác nhau giữa hai API này là gì? Và tôi nên sử dụng những gì nếu tôi muốn tải xuống một số dữ liệu từ máy chủ của ứng dụng của mình từ bây giờ?

Tôi chỉ không chắc chắn về sự khác biệt giữa hai, vì vậy tôi chỉ nghĩ rằng tôi nên nhận được những nghi ngờ của tôi làm rõ ở đây. Truy cập StackOverflow!

Trả lời

9

Đây là những điều hoàn toàn khác nhau.

  • nền Fetch: Hệ thống khởi chạy ứng dụng của bạn tại một thời gian (heuristics) và công việc của bạn là để bắt đầu tải nội dung mới cho người dùng.

  • NSURLSession: Thay thế cho NSURLConnection, cho phép tải để tiếp tục sau khi ứng dụng bị đình chỉ.

+0

Oh ok, cảm ơn bạn đã làm rõ, đôi khi tài liệu có thể cồng kềnh. Các "bắt đầu/tiếp tục" phrasing đã giúp tôi hiểu nó.Vì vậy, tôi đoán tôi chỉ nên sử dụng kiểu App Delegate/Background Fetch. Cảm ơn! – GangstaGraham

+0

Chỉ một điều nữa. Hai không cần thiết được sử dụng trong conjuction. Nếu _content cho user_ cần yêu cầu dữ liệu nhỏ, giống như một số cập nhật nguồn cấp dữ liệu thì sẽ không tốt khi sử dụng _background mode_ cho NSURLSession. Chế độ nền chủ yếu để tải xuống tệp và các bản tải xuống đó có thể bị tạm dừng bởi hệ thống khi cần. – Tricertops

+0

Cảm ơn bạn đã cung cấp thêm thông tin. Tôi đánh giá cao nó. Nó chỉ nhận được một số JSON từ máy chủ vì vậy, tìm nạp nền là tốt, tôi đoán. – GangstaGraham

3

Đại biểu ứng dụng dành để lưu trình xử lý hoàn thành để bạn có thể gọi nó khi quá trình tải xuống của bạn hoàn tất.

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

    self.backgroundSessionCompletionHandler = completionHandler; 
} 

và gọi handler

- (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

Vì vậy, bạn xác nhận URL nềnPhù hợp với đại biểu nên được gọi, trong khi một DataTask bình thường có khối không được?

0

NSURLSession: Cho phép tải lên và tải xuống ở chế độ nền và đình chỉ chế độ áp dụng

nền Fetch: xảy ra theo khối lượng của dữ liệu và thời gian của dữ liệu trước đó chuyển process.Only kéo dài tuổi 30 .