zoukankan      html  css  js  c++  java
  • 安卓学习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所在的线程之中了。

  • 相关阅读:
    Linux中几种常用的查看文件内容的命令(file,cat,more,less,head,tail)
    Linux 链接文件讲解
    postgreSQL psql工具使用详解
    将Redhat,CentOS,Ubuntu虚拟机的IP设为静态IP的方法
    Hive中的Order by与关系型数据库中的order by语句的异同点
    Hadoop namenode节点无法启动的问题解决
    虚拟机上的Ubuntu 文件系统成为只读模式的解决办法
    Hive参数的临时设置和永久性设置
    hive动态分区和混合分区
    MongoDB之Linux下的安装
  • 原文地址:https://www.cnblogs.com/092e/p/14916595.html
Copyright © 2011-2022 走看看