zoukankan      html  css  js  c++  java
  • 关于handler 和 looper 的问题

    重新去学习回顾looper和handler ,还是需要重新认识这个经常使用的机制。

    我首先是看任玉刚老师的书《android的开发艺术探索》的第十章。

    里面一句话开始说出了我们大概的理解
    ——handler的使用就是将一个人物切换到handler 所在的线程去执行。

    在里面,我们需要理解handler运行需要两个底层looper 和 messagequeue

    messagequeue,叫做消息队列,但是存储的不是真正的队列,而是单链表。

    looper,使用来处理消息,而且对应也是每个对应线程的一个特殊的threadlocal。

    整个过程,可以理解为:

    handler通过sendmessage把msg发送到messsagequeue,然后messagequeue的next方法调用looper去处理这个msg消息。接下来,就是looper会把消息发送回handler的dispatchmessage方法来处理

    但是有个地方,就是在dispatchmessage的msg.callback和Callback,两者间是有区别的,根据书上所说:

    自带的Callback,可以用来创建一个handler的实例但是不需要派生handler的子类。

    具体这个地方也需要理解。

    而looper要注意的是,因为这个类会不断无限循环调用方法,需要在完成所有事情后使用quit或quitsafely(在所有消息结束后立即退出looper)。

    handler 还有一个特殊的构造方法,就是

    public Handler(Looper looper){

    this(Looper looper,null,false);

    }

    这个也是解决我之前遇到过的一个异常:

    can't create handler inside thread that has not called looper.prepare()。

  • 相关阅读:
    js选中文本的功能
    css中2端对其布局
    融合渐变轮播图和左右点击轮播图的js
    Hibernate入门一
    SpringDay01
    使用DoTwenn动画的不正常播放
    转载 利用WWW类获取图片并且在unityUGUI的Image中显示
    转载 Unity进阶技巧
    Unity中导入iTween插件问题
    转载 [Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
  • 原文地址:https://www.cnblogs.com/gengen1990/p/5843876.html
Copyright © 2011-2022 走看看