Summary
In this chapter we used Handler
to queue work for the main thread to process, as a means of maintaining responsiveness in a single-threaded application.
We saw the different ways we can define work with Handler
—arbitrary work defined at the call site with Runnable
, or predefined work implemented in the Handler
itself and triggered by message sending.
We learned how to use Handler
in a multithreaded application to pass work and results back and forth between cooperating threads, performing blocking operations on an ordinary background thread, and communicating the results back to the main thread to update the user interface.
We also met HandlerThread
and used it to create a background thread with its own Looper
, allowing us to use these same techniques to queue work for background processing.
This isn't the last we'll see of Handler
and HandlerThread
—they can also be usefully put to work in other contexts, as we'll discover in Chapter 5, Queuing Work with IntentService and Chapter 6...