If the programmer does not use any concurrency constructs, all code of an Android application runs in the main thread and every statement is executed after each other.
To provide a good user experience all potentially slow running operations in an Android application should run asynchronously, e.g. via some way of concurrency constructs of the Java language or the Android framework. This includes all potential slow operations, like network, file and database access and complex calculations.
1. Using Java threading in Android
Android supports the usage of the Thread class to perform asynchronous processing.
Android also supplies the java.util.concurrent package to perform something in the background, e.g. using the ThreadPools and Executor classes.
If you need to update the user interface from a new Thread, you need to synchronize with the user interface thread.
2.Concurrency constructs in Android
Android provides additional constructs to handle concurrently in comparison with standard Java. You can use the android.os.Handler class or the AsyncTasks classes. More sophisticated approach are based on the Loader class, retained Fragments and services.
Purpose of the Handler class
The Handler class can be used to register to a thread and provides a simple channel to send data to this thread.
A Handler object registers itself with the thread in which it is created. For example, if you create a new instance of the Handler class in the onCreate() method of your activity, the resulting Handler object can be used to post data to the main thread.
The data which can be posted via the Handler class can be an instance of the Message or the Runnable class.