Introduction to Android concurrency
A default execution for our application is performed on the main application thread. This execution must be performant! If it happens that something is performing too long, then we get ANR--an Android application not responding message. To avoid ANRs, we run our code in the background. Android provides mechanisms so we can do that efficiently. Running operations asynchronously gives not just good performance, but great user experience.
Main thread
All user interface updates are performed from one thread. This is the main thread. All events are collected in a queue and processed by the Looper
class instance.
The following image explains the relationship between classes involved:

It is important to note that the main thread updates are all the UI you see. However, it can be done from other threads as well. Doing this directly from some other thread will cause an exception and your application can crash. To avoid this, execute all thread-related code on the main...