If you instantiate without parameters: Handler handler=new Handler (), then this will default to the Looper object of the current thread.
In general, if your handler is to be used to refresh the UI, it needs to run under the main thread.
Case
1 to refresh Ui,handler to use the Looper object to the main thread. Then in the main thread handler Handler=new handler () if the other non-main thread also to meet this function, to handler Handler=new handler (Looper.getmainlooper ());
2 Do not refresh the UI, just process messages. If the current message is the main thread, Handler handler=new Handler; The main thread, Looper.prepare () Handler handler=new Handler (); Looper.loop () or handler handler=new Handle (Looper.getmainlooper ());
If you instantiate the call Looper.getmainlooper () will be placed in the main thread to handle.
If not, because only the UI thread defaults to Loop.prepare () Loop.loop (), other threads need to call these two manually. Otherwise you will get an error.
About the difference between New Handler () and New Handler (Looper.getmainlooper ())