Applications of Services

With a little bit of work, Services give us the means to perform long-running background tasks, and free us from the tyranny of the Activity lifecycle. Unlike IntentService, directly subclassing Service also gives us the ability control the level of concurrency.

With the ability to run as many tasks as we need and to take as long as is necessary to complete those tasks, a world of new possibilities opens up.

The only real constraint on how and when we use Services comes from the need to communicate results to a user-interface component, such as a Fragment or Activity, and the complexity this entails.

Ideal use cases for Services tend to have the following characteristics:

  • Long-running (a few hundred milliseconds and upward)
  • Not specific to a single Activity or Fragment class
  • Must complete, even if the user leaves the application
  • Requires more concurrency than IntentService provides, or needs control over the level of concurrency

There are many applications that exhibit these characteristics, but the stand-out example is, of course, handling concurrent downloads from a web service.

To make good use of the available download bandwidth and to limit the impact of network latency, we want to be able to run more than one download at a time (but not too many). We also don't want to use more bandwidth than necessary by failing to completely download a file and having to restart the download later. So ideally, once a download starts, it should run to completion even if the user leaves the application.

In the accompanying downloads from the Packt Publishing website, you can find a complete example of using a Service to download NASA's "Image of the Day" RSS, parse the XML in the background to extract the titles and URLs of the images, and download and display those images.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.145.64.192