如果你不带参数的实例化:Handler handler=new Handler();那么这个会默认用当前线程的Looper对象。

一般而言,如果你的Handler是要用来刷新UI的,那么就需要在主线程下运行。

情况:

1 要 刷新UI,handler要用到主线程的Looper对象。那么在主线程Handler handler=new Handler() 如果在其他非主线程也要满足这个功能的话,要Handler handler=new Handler(Looper.getMainLooper());

2 不用刷新UI ,只是处理消息。当前消息如果是主线程的话,Handler handler=new Handler ;不知主线程的话,Looper.prepare() Handler handler=new Handler();Looper.loop() 或者Handler handler=new Handle(Looper.getMainLooper());

若是实例化的时候调用Looper.getMainLooper()就表示放到主线程中去处理。

若有不是的话,因为只有UI 线程默认Loop.prepare() Loop.loop()过,其他线程需要手动调用这两个。否则会报错。