美文网首页
不可描述的Handler -_-

不可描述的Handler -_-

作者: markchan | 来源:发表于2017-10-18 19:39 被阅读0次
    一. Handler是什么

    Handler是Android给开发者提供用来用来更新UI的一套机制, 也是一套消息处理机制, 开发者可以发送消息, 也可以通过它处理消息

    二. 为什么要用Handler

    Android在设计的时候, 就封装了一套消息创建、传递、处理机制. 如果不遵循这样的机制就没有办法更新UI消息, 就会抛出异常信息

    三. 怎么使用Handler
    sendMessage(); 
    sengMessageDelayed(); 
    post(Runnable); 
    postDelayed(Runnable, long); 
    
    四. Handler的组成
    • Handler
      封装了消息的方法(主要包括消息发送给谁), 将消息发送给Looper
    • Looper
      • 内部包含一个消息队列,也就是MessageQueue, 所有的Handler发送的消息都走向这个消息队列
      • Looper.loop()方法, 就是一个死循环, 不断地从MessageQueue中取消息, 如有消息就处理消息, 没有消息就阻塞
    • MessageQueue
      就是一个消息队列, 可以添加消息, 并处理消息
    五. Handler的原理

    Handler内部会跟Looper进行关联, 也就是说在Handler内部可以找到Looper, 找到Looper也就找到了MessageQueue, 在Handler中发送消息,
    其实就是向MessageQueue队列中发送消息

    思考: Android为什么要设计只能通过Handler机制更新UI?

    最根本的目的是解决多线程并发问题

    假设一个场景: 在一个Activity当中, 有多个线程去更新UI

    问题一: 更新UI时并且都没有进行加锁处理, 那么会产生什么样的问题 -- 更新界面错乱
    问题二: 如果对更新UI的操作都进行加锁处理的话, 又会产生什么样的问题 -- 性能下降

    基于对以上问题的考虑, Android给开发者提供了一套更新UI的机制,
    我们只需遵循这样的机制就可以了; 根本不用去关心多线程的问题, 所有更新UI的操作, 都要在主线程的消息队当中去轮询处理的

    总结
    • Handler负责发送消息, Looper负责接收Handler发送的消息, 并直接把消息回传给Handler
    • MessageQueue就是一个存储消息的容器

    相关文章

      网友评论

          本文标题:不可描述的Handler -_-

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