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. As opposed to IntentService
, directly sub-classing a Service
also gives us the ability to 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
Does not require user intervention to complete
Operations that require state between different calls
Requires more concurrency than...