最近公司的项目需要异步加载多条数据,之前一直是起线程加载,也没用过Handler和AsyncTask,但是线程中不能更新UI,趁着这次机会,自己也是好好学习了一下handler的机制。
其实不走源码的话,handler的用法很简单,新建一个线程,在线程中定义需要使用的操作,操作完回复,这里的回复其实就是新建一个Message对象,根据Message对象的定义,通过新建Handler,调用其sendMessage方法,继而转到handleMessage方法中,在这个方法中进行UI 的更新等操作。
当然Handler中的方法还是很多的,不过我常用的就是postDelayed和handleMessage方法。
肯定有人像我一样很好奇Handler的实现机制,其实一张图就能解释一切。(嘿嘿,借用一下郭霖大神的图)
Looper的作用:每个线程只有一个Looper,他负责管理MessageQueue,会不断的从MessageQueue取出消息,分发给对象 的handler
MessageQueue的作用:由Looper管理,而MessageQueue则采用先进的方法来管理Message!
Handler的作用:它把消息发送给Looper管理的MessageQueue,并负责处理Looper分发给他的消息。