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 ...