Explain the differences and use-cases for AsyncTask, Handlers, and RxJava in Android.

Instruction: Discuss the pros and cons of each approach for performing background operations in Android.

Context: This question is designed to evaluate the candidate's understanding of different methods for executing background tasks and their ability to choose the appropriate tool for a given scenario.

Updated

Official answer

These tools solve different problems, and none makes arbitrary work lifecycle-safe automatically.

  • AsyncTask: a legacy helper for a short background computation and callbacks on the main thread. It was deprecated in API level 30. Its lifecycle coupling, configuration-change behavior and exception handling make it a poor default for new code; an older target SDK is not a reason to select it for new development.
  • Handler: posts messages or runnable work to the message queue of its associated Looper and thread. It does not create a background thread. Posting expensive work to a main-thread handler still blocks the UI. Specify the intended looper, manage pending callbacks and avoid retaining a destroyed activity. A worker thread or executor is a separate decision.
  • RxJava: composes streams and asynchronous operations, including transformations and error handling. Many sources execute synchronously unless scheduling is introduced. subscribeOn affects where subscription/upstream work runs; observeOn changes where downstream notifications are processed. Use the appropriate Android main-thread integration for UI updates, handle errors and dispose subscriptions according to ownership. Scheduler changes alone do not solve lifecycle or backpressure problems.

For new Kotlin UI-related work, lifecycle-aware coroutines often provide a clearer ownership and cancellation model. A coroutine must still use a suitable dispatcher for blocking work. For deferrable work that needs to persist beyond a screen or process lifetime, consider WorkManager with explicit constraints, retry and idempotency rules; it is not an exact-time scheduler.

Choose by the required lifetime, ordering, cancellation and delivery guarantees. Test navigation or rotation during work, cancellation, errors and process restart when persistence is required, rather than selecting a tool solely because it is described as asynchronous.

Sources

AsyncTask deprecation; Handler; RxJava scheduling; Android persistent work.

Related Questions