若是你不帶參數的實例化:Handler handler=new Handler();那麼這個會默認用當前線程的Looper對象。oop
通常而言,若是你的Handler是要用來刷新UI的,那麼就須要在主線程下運行。線程
狀況:對象
1 要 刷新UI,handler要用到主線程的Looper對象。那麼在主線程Handler handler=new Handler() 若是在其餘非主線程也要知足這個功能的話,要Handler handler=new Handler(Looper.getMainLooper());get
2 不用刷新UI ,只是處理消息。當前消息若是是主線程的話,Handler handler=new Handler ;不知主線程的話,Looper.prepare() Handler handler=new Handler();Looper.loop() 或者Handler handler=new Handle(Looper.getMainLooper());loop
如果實例化的時候調用Looper.getMainLooper()就表示放到主線程中去處理。handler
如有不是的話,由於只有UI 線程默認Loop.prepare() Loop.loop()過,其餘線程須要手動調用這兩個。不然會報錯。消息