美文网首页
不可描述的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 -_-

    一. Handler是什么 Handler是Android给开发者提供用来用来更新UI的一套机制, 也是一套消息处...

  • Handler机制详解

    Handler是什么 先来看官方文档对Handler的描述A Handler allows you to send...

  • Handler postDelayed的实现原理

    Handler postDelayed的实现原理 问题描述 Handler.postDelayed()的原理是如何...

  • Handler造成内存泄露的分析和解决办法

    Android中使用Handler造成内存泄露的分析和解决办法 问题描述:This Handler class s...

  • 不可描述的

    写于2017年1月,满天不可描述 生活不止是眼前的苟且 还有他妈的远方的苟且 今天是难以言表的苟且 明天是不可描述的苟且

  • 不可描述

    我不知道如何形容这种感受,很虚幻,却又无比真实。在看到她的时候我心跳加速,如今却想不起她的面容。跟她在一起时感觉...

  • 不可描述

    昨天晚上不可描述,当然我肯定是后悔的,这种事,就算你keep real.你也不能违背道德啊! 对了,送给你一句话。...

  • 不可描述

    梦。好像挺末世的。 主角是“我”,但又不是“我”,是第一视角的“她”,我看上去应该只是个跟着她的视角的观察者。 是...

  • 不可描述

    C:“唉!小张,正好帮看一下电脑。” 小张:“什么问题?” C:“你过来看一下吧,我描述不清楚。” W:“那就是‘...

  • 不可描述

    世界末日 所有景色都躲在云里 昏天暗地 对此我们不屑一顾 我只想和你 不可描述

网友评论

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

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