I need to implement posting some data to a web server in the background. Just to clarify, by “in the background”, I don’t mean the normal way of showing a spinning icon and posting data to a web service using something like an AsyncTask or ASIHTTPRequest‘s [request startAsynchronous] method. I need to maintain a queue of data that a Thread can asychronously start processing and posting to a Web service while the user is working in the application.
I’m looking for some help on designing a queue like that, especially in some edge cases like User receiving a call, logging out of the application while the the post is happening, user leaving the application to goto a different one while a post is happening and the like. How would you handle these cases? Is there any source code you can recommend that does this?
Thanks,
Teja.
I’ve started using
NSOperationQueuein my own work lately, for controlling background network requests.NSOperationdeals with most of the boilerplate code necessary for asynchronously running tasks (such as network operations) on threads in the background (or foreground, if necessary for UI updates).It also allows dependencies across queues; for example, I use two queues in my application:
The first schedules image downloads, at a max concurrency of 2 at a time, in the background. Each image download has a corresponding completion handler (as an
NSBlockOperation) that is dependent on the image download completing. These operations sit on the[NSOperationQueue mainQueue], which operates on the main thread, allowing them to update UI (specifically, the correspondingUIImageView).Note that
NSOperationandNSOperationQueueare not for network requests only, but any operation that can be divided into atomic tasks and scheduled concurrently.Here are Apple’s intro docs on the topic.