不可描述的Handler -_-

一. 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 -_-)