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()。

  • 相关阅读:
    .net core 注入的几种方式
    Entity framework Core 数据库迁移
    Net Core中使用Newtonsoft.Json进行序列化保持原有大小写
    .net core 中间件
    .net core webapi 中使用Swagger
    HttpClient使用
    使用第三方库(Senparc)完成小程序支付
    JDK官网下载与安装过程
    制作多系统U盘
    WIN7共享打印机
  • 原文地址:https://www.cnblogs.com/gengen1990/p/5843876.html
Copyright © 2011-2022 走看看