谈谈Handler原理

最近辞职在家,正在准备面试的东西,在搞简历的时候,又看到了Handler机制这个东西,又想起了去年面试时候面试官问到Handler机制时自己回答的紧张而又断断续续,虽然结果是好的,但是此刻仔细回想,还是语言组织以及当时只想源码里怎么怎么样,而忽略了自己本身要对Handler机制的深入理解的正确性。

都说我们Android在启动后是有一个主线程也就是UI线程去执行的,当我们要做一些类似于网络请求或者别的耗时操作的时候,我们要去开启一个工作线程去执行耗时操作,等到耗时操作结束时,有更新UI的操作需求的话,我们通过Handler可以满足这个更新UI的需求。
那么如何去通知主线程更新UI呢?Handler的发送消息可以通过sendMessage或者post的方式去完成,前者是发送的message对象,后者是一个Runnable对象。但实际上post内部其实也是调用的sendMessageAtTime去通过message传递消息的。

既然是说到了Message,那么就不得不提MessageQueue和Looper。
当我们去发送消息的时候,我们的消息都会放到消息队列(也就是MessageQueue)中,然后通过Looper去遍历提取消息,如果为空的话Return,如果有消息的话,就调用了Handler的dispatchMessage方法回调。在diapatchMessage中,做了判断分辨是发送消息的是sendMessage还是post,这里post的Runnable的对象是存到了Message的callback中,所以对callback做了非空判断去决定最后调用的方法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息...
    cxm11阅读 11,496评论 2 39
  • 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将手把手带你深入分析Handle...
    BrotherChen阅读 3,321评论 0 0
  • Handler在android开发中占有举足轻重的位置,相信大家都熟悉其用法及基本使用。 Handler是...
    海水未顶阅读 9,178评论 0 5
  • Handler主要作用一句话概括:线程间通信。 在日常开发中主要作用于两方面: 1、在UI线程进行耗时操作时,将耗...
    大棋17阅读 1,950评论 0 0
  • 一、提出问题 面试时常被问到的问题: 简述 Android 消息机制 Android 中 Handler,Loop...
    崽子猪阅读 5,403评论 0 10