Android uses the UI single-thread model. Therefore, communication between working threads (non-UI threads) and UI threads is inevitable. There are three main ways for a worker thread to communicate with the UI main thread (to update the UI and perform other operations.
First:
Looper. getMainLooper ()
Runnable task = getTask ();
New Handler (Looper. getmainloler (). post (task );
Second:
Activity # runOnUiThread ()
Runnable task = getTask ();
RunOnUiThread (task );
The implements of runOnUiThread is shown as bellow:
Public final void runOnUiThread (Runnable action ){
If (Thread. currentThread ()! = MUiThread ){
MHandler. post (action );
} Else {
Action. run ();
}
}
It will check if the current Thread is already the UI thread and then execute it directly. Posting it as a message will delay the execution until you return from the current UI-thread method.
Third:
There is also a third way to execute a Runnable on the UI thread which wocould be View # post (Runnable)-this one will always post the message even when called from the UI thread. that is useful since that will ensure that the View has been properly constructed and has a layout before the code is executed.