In this chapter we learned to schedule work for our applications to perform at some time in the future, either as a one-off operation or at regular intervals.
We learned to set alarms relative to the system clock or real time, how to wake the device up from a deep sleep, and how to cancel alarms when we no longer need them.
Our exploration covered various options for responding to alarms, including bringing an Activity
to the foreground or doing work directly in a BroadcastReceiver
, synchronously or asynchronously.
Finally, we arranged for a Service
to be launched with a WakeLock
to keep the CPU from powering down while our long-running background work is completed.
Over the course of this book, we've armed ourselves with a powerful array of tools for building responsive Android applications. We discovered that it is incredibly important to shift as much work as possible off the main thread, and explored a number of constructs and techniques for doing that.
We now know how to move short-term operations to background threads using AsyncTask
and HandlerThread
. We learned how to perform asynchronous I/O to load data from local files and databases with Loader
, and then discovered how, when, and why to use Service
and its more specialized subclass IntentService
to give our long-running tasks the best possible chance of being completed successfully. Finally, we learned how to schedule tasks to run at some future time using AlarmManager
.
By keeping in mind that the main thread is sacred, and using the available constructs to perform work on background threads whenever possible, our applications will be smooth and responsive, and have the best possible chance of delighting our users.
3.135.192.141