美文网首页
Handler原理

Handler原理

作者: 残非 | 来源:发表于2021-01-27 23:43 被阅读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就拿到了当前处理的消息。

    相关文章

      网友评论

          本文标题:Handler原理

          本文链接:https://www.haomeiwen.com/subject/utpmaktx.html