Handler原理

2021-01-27  本文已影响0人  残非

Handler是android子线程和主线程之间通信的一种机制。
主要包含四个类handler looper messagequeue message

handler作用?

用来发送和处理消息的。

一个线程中多个handler发消息处理消息为什么不混乱?:
message.target = handler(当前发消息的handler)

Looper作用?:

通过loop(for死循环)查看当前的消息链表中是否有需要处理的message。

MessageQueue作用?:

用来存储message的链表(链表中的消息message是按when(当前系统的时间戳)从小到大的排列)。

Message作用?:

用来存储消息内容

如何把Handler,Looper,MessageQueue,Message串起来?

通过handler.sendMessage这个方法,把当前的消息对象message传入到handler中,通过handler中的messagequeue对象的引用,把Message放入到MessageQueue中。

在message存放的时候,message对象的target属性记录了当前的handler。message通过消息的执行时间when,从小到大排列插入到消息链表中。

我们looper的loop方法中的for(死循环)去查看当前的MessageQueue链表中是否有需要执行的Message。通过Message的when(消息的执行时间判断)和当前的系统时间戳做对比,如果当前的系统时间戳小于当前messagequeue链表中的消息执行时间,当前的执行进入等待状态。如果当前的系统时间戳大于或等于当前的MessageQueue链表中的消息执行时间,我们就把当前的message从消息链表中删除,并且把该消息返回给Looper的loop方法中。

在loop方法中获取到message以后判断message所对应的target是否存在,如果存在就调用target.dispathMessage方法把当前的message传入,在dispathMessage方法中,我们将调用handleMessage这个方法。把当前取出的message传出去。这样在我们handler中重写的handleMessage就拿到了当前处理的消息。

上一篇下一篇

猜你喜欢

热点阅读