askvity

What is an Android Handler?

Published in Android Threading 4 mins read

An Android Handler is a fundamental tool for managing communication between threads in an Android application.

At its core, a Handler is the Android way of Thread communication. It allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. This mechanism is crucial for preventing ANRs (Application Not Responding) errors by enabling background threads to send results or tasks back to other threads, often the main UI thread.

Key Aspects of Android Handlers

Understanding Handlers involves recognizing their role within Android's multithreading model. Unlike direct method calls between threads, which can lead to synchronization issues and race conditions, Handlers provide a structured, sequential way to handle requests on a specific thread.

Thread Communication and Action Ordering

As highlighted by the reference, you use Handler to order threads to perform the desired action. This ordering happens by enqueuing messages or runnables onto the target thread's message queue. The thread, associated with a Looper, processes these messages one by one.

  • Sending Messages/Runnables: A Handler allows you to post a Runnable or sendMessage to its associated thread.
  • Receiving Messages: The Handler can implement handleMessage() to process the received Message objects.

Relationship with Looper and MessageQueue

A Handler doesn't work in isolation. It requires a Looper and a MessageQueue:

  • Looper: A Looper is responsible for looping through a thread's MessageQueue, pulling messages out, and dispatching them to the appropriate Handler.
  • MessageQueue: This is simply a queue that holds the messages and runnables posted to a thread.

A thread needs to have a Looper associated with it to be able to use a Handler to receive messages. The main UI thread automatically has a Looper. Background threads need to be explicitly prepared to have a Looper using Looper.prepare() and Looper.loop(). This is the "small ceremony" mentioned in the reference.

Not Related to UI (Directly)

The reference states, "It is not related to UI." This is an important distinction. The Handler itself is a threading primitive; it's not part of the Android UI toolkit (like View or ViewGroup). However, it is frequently used in conjunction with the UI thread because the UI thread is the only thread allowed to update UI elements.

Practical Use Case: A background thread fetches data from the internet. It cannot directly update a TextView on the screen. It uses a Handler associated with the UI thread to post a Runnable that performs the setText() call safely on the UI thread.

Why Use Handlers?

Handlers solve the problem of inter-thread communication safely and efficiently in Android.

Problem Solved Handler Solution
Direct UI updates from background threads (IllegalStateException) Post a task to the UI thread's Handler.
Need to schedule tasks for the future Use postDelayed() or sendMessageDelayed().
Sequential processing of tasks on a specific thread Enqueue tasks (Message or Runnable) via the Handler onto the thread's queue.

Example Scenario

Imagine you have a background Thread downloading an image. Once the download is complete, you need to display it in an ImageView on the main screen.

  1. The background Thread finishes downloading the image.
  2. It obtains a reference to a Handler that was created on the main UI thread.
  3. It calls handler.post(new Runnable() { ... }).
  4. The Runnable is added to the main UI thread's MessageQueue.
  5. The main UI thread's Looper pulls the Runnable from the queue and executes it.
  6. Inside the Runnable, you can safely call imageView.setImageBitmap(downloadedImage).

Any thread can be used with Handler way, provided that thread has a Looper initialized. This is the "small ceremony" needed for background threads to receive messages via a Handler created on them.

In summary, Handlers are a core part of Android's concurrency framework, enabling threads to send messages and execute code on specific target threads safely and in an ordered manner.

Related Articles