Handler机制详解

Handler

  • Handler:

    • 概述: Handler负责取出、发送并且处理Message,每个Handler实例都与
      创建它的线程以及该线程的MessageQueue相关联。默认的Handler是同步的,也可以扩
      展android.os.Handler构造异步Handler,即异步发送消息。
    • 作用:

      • 作用一:发送消息或Runnable 在未来某个时间点发送消息或Runnable
        • post: 排序Runnable,以便在接收时由MessageQueue调用。
        • sendMessage: 排序包含Bundle数据的message,以便被handlerMessage
          方法调用。
      • 作用二:线程切换 将action(活动)enqueue(排队),并在其它线程执行。
    • 创建Handler:

      • 方法一:实现Callback: 通过实现Callback创建的Handler,其内部默认使用当前
        线程的Looper(测试过)。
      • 其他方法: 请参阅Handler的构造器。
    • 数量: 一个线程中可以实例化多个Handler,但是只能实例化一个与之相关的Looper。
      测试过,在主线程中,通过扩展Handler以及实现Callback方法创建的Handler,它们
      在内存中分配的地址不同,但是通过这两个Handler获取的Looper在内存中的地址是
      相同的。

  • Looper:

    • 概述: 为线程运行消息循环的类,线程默认没有和Looper关联,要创建一个Looper
      ,先在线程运行loop的地方调动looper.prepare(),然后调用looper.loop()处理
      消息,在调用looper.prepare()(即创建Looper)的时候会创建一个MessageQueue,
      Looper负责循环,MessageQueue负责取出消息,所有在Looper中Message被不停的取
      出来。
    • 消息调度: 在Looper.loop()方法中会执行dispatchMessage(msg),进行
      消息的调度。
  • MessageQueue:

    • 概述: Message并不会直接添加到MessageQueue中,而是通过与Looper关联的
      Handler。
  • Handler机制总结:

    • Handler工作机制: Looper是一个消息循环,不断通过MessageQueue
      取出Message,并通过与该Looper关联的Handler向外部发送Message,并通过
      Handler的Callback回调处理该Message。
  • 优缺点: (摘自网络)

    • 优点: (感觉像废话,没觉得)
      • 结构清晰,功能定义明确
      • 对于多个后台任务时,简单,清晰
    • 缺点: (同样觉得是在扯淡)
      • 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
  • Demo下载地址:

https://download.csdn.net/download/chenyuan_jhon/10349121

猜你喜欢

转载自blog.csdn.net/chenyuan_jhon/article/details/79942776