若是你不带参数的实例化: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()过,其余线程须要手动调用这两个。不然会报错。消息