Best practice to send a lot of data in background on iOS4 device?

后端 未结 5 1213
南旧
南旧 2020-12-12 23:55

I have an app that needs to send data (using POST) to a server. This function has to be on one of the NavigationController sub-controllers and user should be able to navigat

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-13 00:13

    OK, I'll answer my own question. First, like tc said, it's better to have this call on the application delegate, so that the View in the NavigationController can be closed. Second, mark beginning of the background processing with beginBackgroundTaskWithExpirationHandler: and end it with endBackgroundTask: like this:

    .h:

    UIBackgroundTaskIdentifier bgTask;

    .m:

    - (void)sendPhoto:(UIImage *)image
    {
      UIApplication *app = [UIApplication sharedApplication];
    
      bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        [app endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid;
      }];
    
    
      NSLog(@"Sending picture...");
    
      // Init async NSURLConnection
    
      // ....
    }
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    
      NSLog(@"Picture sent.");
      
      UIApplication *app = [UIApplication sharedApplication];
    
      if (bgTask != UIBackgroundTaskInvalid) {
        [app endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid;
      }
    }
    

    You have 10 minutes before iOS terminates your app. You can check this time with [app backgroundTimeRemaining]

提交回复
热议问题