handler是Android给我们提供来更新ui的一套机制,也是一套消息处理机制,他可以在线程之间进行通信。他常用的通信方式为在另外一个线程调用handler对象的sendMessage()方法,发送的是一个Message对象,Message为一个单链表结构,他里面维护了一个静态的message池,我们在使用此方法时,最好调用handler的obtain方法,因为在Looper处理完message之后会回收这个Message对象, 将他加入到这个消息池中,这个消息池的最大值为50个,当他不为饱和状态时,会一直回收已经执行完了的Message,这样就会造成不必要的内存占用。sendMessage最终会将消息入队在一个MessageQueue,MessageQueue存在于Looper这个类中,一个线程中只能存在一个Looper,消息的处理是在Looper的loop方法中进行的,他会无限循环来获取这个MessageQueue的next,当这个Message没有next的时候,会阻塞并等待新的消息,阻塞的原因是MessageQueue在执行next方法时,会去循环出队,当没有next的时候,回去调用native中的nativePollOnce()方法传入-1,会一直去阻塞这个队列的next方法,当阻塞时,直到有新的消息入队,才会去调用一个native中的方法nativeawake来唤醒队列,进而进行消息的出队
Handler
最新推荐文章于 2023-08-04 15:29:22 发布