Handler机制详解

版权声明:本文为博主原创文章,但部分内容来源网络,如有侵权,告知即删! https://blog.csdn.net/chenyuan_jhon/article/details/79942776

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工作机制:
      Handler创建并发送Message到MessageQueue中,MessageQueue在一个消息循环Looper中,Looper不断轮询MessageQueue,如果有Message,则取出交给Handler处理,如果没有,则等待。
  • 优缺点: (摘自网络)

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

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

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页