• 安卓学习12


    handler机制
    1、handler是android线程之间的消息机制,主要的作用是将一个任务切换到指定的线程中去执行,android系统中的一个例子就是主线程中的所有操作都是通过主线程中的handler去处理的。

    2、Handler的运行需要底层的 messagequeue和 looper做支撑。

    3、
    3 .1 、首先说messagequeue,messagequeue 是 一 个 消 息 队 列 , 它是采用单链表的数据结构来存储消息的,因为单链表在插入删除上 的效率非常高。Meaasgequeue主要包含一个是插入消 息的 enqueuemessage方法,和一个取出一条消息的next方法。
    3.2、然后说 looper,looper在安卓的消息机制中是扮演着消息调度的角色,具体来说就是他会不停的从 messagequeue中查看 是否有新消息,如果有就会立刻处理,否则会一直阻塞在messagequeue的next那里。构成 一个 looper是需要一个 messagequeue,而构成一个 handler则需 要一个 looper,looper一般是调用Looper.prepare()方法使用 threadlocal在线程的ThreadLocalMap中存储一个looper的,线程中有了looper之后就可以在这个线程中创建一个 handler了。
    3.3、最后说 handler,hanlder的构成是需要一个 looper,主线程 之中,在activitythread的main方法中(程序入口)通过 looper.preparemainlooper在主线 程中存储一个 looper,而在子线程之中,我们则需要手动的通过 looper的 prepare在子线程中存储一个 looper,然后通过 looper.loop 开启一个消息循环。 handler发送消息的过程,handler.send (message)方法实际上是往构成他的 looper的 messagequeue中 插入了一条消息,在将这条消息插入 messagequeue中之前,他需 要将此消息的 target变量指向当前发它的 handler,looper发现构成它的 messagequeue中有消息时, looper的 loop方法就会从 messagequeue中取出这条消息,然后调 用 msg.target.dispatchmessage,即调用发送这个消息的 handler 的 dispatchmessage方法来处理这个消息,注意,dispatchmessage 方法是在构成 handler的 looper中的loop方法中调用的,所以处理消息的逻辑就切换到了handler所在的线程之中了。

  • 相关阅读:
    PHP用腾讯地图api根据地址获取经纬度的方法
    Tomcat实现负载均衡
    命令行备忘神器 Navi
    Bashtop – Linux的资源监视工具
    使用jinfo出现“can't determine target's VM version”问题解决方法
    axios 封装【满足常规数据上传及file上传】
    前端基础之设计模式篇
    使用Chrome插件拦截广告的原理
    前端基础之算法篇
    一道面试题引发的思考
  • 原文地址:https://www.cnblogs.com/092e/p/14916595.html
Copyright © 2020-2023  润新知