关于new Handler()与new Handler(Looper.getMainLooper())区别

如果你不带参数的实例化: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()过,其他线程需要手动调用这两个。否则会报错。

上一篇:ServerBootstrap的handler()和childHandler()区别


下一篇:设计模式(一)工厂模式Factory(创建型)(转)