笨比最近搬砖 ,频繁的看到Handler使用。之前只是知道Handler是可以更新UI页面的,但是具体的流程以及其他的使方式笨比一点也不清楚,从网上参考了一些资料,记录下学习记录,加深记忆
1、使用handler 更新UI的原因
例如,页面有一个按钮或者文本框,如果按钮的响应或者获取文本框的时候 有其他耗时任务,会造成页面假死状态。在Android中,主线程是非线程安全的,也就是说UI的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。
为了解决以上问题, Android设计了handler机制,由handler来负责与子线程进行通讯,从而让子线程与主线程之间建立起协作的桥梁。
2、Handler的工作原理
Handler 通过将消息发送给 MessageQueue(消息队列)中,MessageQueue(消息队列)是通过Looper对象处理消息的。
在主线程中 会有默认的Looper对象,如果在子线程中使用Handler,必须要在当前线程中创建Looper对象,否则会抛异常。
Looper对象在创建的时候会实例化MessageQueue对象。Looper 以死循环的形式不断从MessageQueue取出消息,并发送给对应的Handler处理。
我理解的消息的流程是 handler——looper——MessageQueue——looper——handler;
3、Handler常用使用方式
handler.post方法内部还是使用的handler.sendMessage()的方式去处理的。
//非延迟
handler.post(Runnable);
//延迟
handler.postDelayed(Runnable ,long);
//举例
handler.post(new Runnable(){
@Override
pulic void run(){
//更新UI
})
//非延迟
handler.sendMessage(Message);
//延迟发送消息
handler.sendMessageDelayed(Message,long);
简单的记录一下,目前所了解的知识点。