一.Handler是什么
是android给我们提供用来更新Ui的机制,也是一套消息处理机制,可以用来发送消息和处理消息的
二。主要作用:
是线程间的通信,实现子线程与主线程之间的切换,通过Handler来异步更新UI,避免线程操作不安全的问题
总体流程:Handler向MessageQueue发送一条Message,MessageQueue通过next方法把消息传给Looper,Looper收到消息后开始处理,然后最终交给Handler自己去处理。
三。Handler原理
Handler机制是由Lopper和Message来构建消息机制的
MessageQueue: 存储消息对象的队列。负责存储消息对象,采用单链表数据结构来存储对象,按照先进先出原则执行,是由Message组成的一个队列
Message:消息对象,包含了消息处理对象以及处理的数据
Handler: 是Message的主要处理者,负责管理消息的发送和收到消息后的逻辑处理
Lopper:消息循环,从消息队列中获取消息执行,一个MessageQueue需要一个Lopper。。MessageQueue来存储消息,Lopper是以无限循环的方式去查找是否有新消息,如果有就去处理,没有就等待,
一个线程创建Handler时首先要创建Lopper的不然会保错RuntimeException: No Looper; Looper.prepare() wasn't called on this thread,
而且每个线程下只需要创建一个Lopper,不然会保错RuntimeException: Only one Looper may be created per thread。
UI线程是不需要创建的,应为ActivityThread创建时就初始化了Lopper,所以在UI 主线程就直接使用Handler
在子线程创建Handler-------应为handler必须调用Lopper.prepare()方法
网友评论