美文网首页
Handler 整理

Handler 整理

作者: 进击的杰爷 | 来源:发表于2018-02-08 11:54 被阅读0次

非主线程创建Handler时,需要调用 Looper.prepare()。

而主线程能够直接创建是因为 ActivityThread类的 main 函数里已经调用了 Looper.prepareMainLooper()。

有了Handler对象之后,便可以发送消息。常用的调用方法有: handler.post() or handler.sendMessage()。而这些方法最终都调用私有方法 handler.enqueueMessage()。

MessageQueue.enqueueMessage 字面意思指的是在消息队列里进行排队。

具体的实现也确实如此,enqueueMessage 方法部分截图:

本以为底层会使用队列集合类的。然而并没有,而是通过 Message 类(单链表)的 next 属性进行排队操作。

至此,已将 Message 成功发送,并也已在待处理队列里。那么,怎么消费的呢?

在刚才Looper.prepare()之后,只是将Looper准备,还需启动:Looper.loop()。ActivityThread类的 main 函数里也确实调用了该方法。

如字面意思,开始无限循环消息队列。

当 Message 不为null,调用 msg.target.dispatchMessage() 。msg.target其实是 handler 对象。handler.dispatchMessage() 如下截图:

至此。消息也就消费完了。

根据上述的整个流程。就可以实现异步请求的处理。

1,Ui线程创建 handler。

2,启动线程进行数据操作。

3,通过handler.post(), handler.sendMessage() 发送消息。

4,looper获取到消息后,再将消息分发给 handler。

5,Ui 线程创建的 handler 正常刷新 UI

网上的一张流程图:

相关文章

  • Handler整理

    1. 定义 一套Android消息传递机制 2. 基本原理 2.1 相关概念 2.2 工作流程 异步通讯准备 消息...

  • Handler 整理

    非主线程创建Handler时,需要调用 Looper.prepare()。 而主线程能够直接创建是因为 Activ...

  • Handler机制整理

    Handler机制整理目录介绍1.关于handler消息机制图2.关于handler基本介绍3.使用handler...

  • Handler使用的整理

    介绍 Message消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更...

  • android之Handler整理

    Handler设计初衷:处于性能的考虑,android的UI线程不是操作安全的,这就意味着如果多个线程同时操作UI...

  • Handler相关问题整理

    1、消息机制Hander作用?有哪些要素?流程是怎样的? 作用:跨线程通信。当子线程中进行耗时操作后需要更新UI时...

  • Handler机制与注意

    关于Handler可能很多初学者有疑问,根据个人的经验整理了下面的笔记,希望能给大家有所帮助 什么是Handler...

  • 你真的了解Handler吗?扶我上墙,我来告诉你

    近来许多参加面试的小伙伴大部分都会被问及Handler相关的知识。索性我就来整理一波Handler。 消息循环机制...

  • Android的消息机制(异步处理)

    Android学习整理 - 系列 目录: Android的消息机制(异步处理)组成 Message Handler...

  • android源码--Handler原理

    handler基本原理基本都理解,但是有些细节时间一久仍会有所遗忘,做些整理也还是有必要的。 一、handler原...

网友评论

      本文标题:Handler 整理

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