Handler原理

Handler使用方式

Handler使用方式 因发送消息到消息队列的方式不同而不同,共分为2大类:使用      Handler.sendMessage()、使用Handler.post()

Handler中四个重要的类:

处理器 类(Handler)

消息队列 类(MessageQueue)

循环器 类(Looper)

消息 类(Message)

大概原理

创建主线程时,会自动调用ActivityThread的1个静态的main();而main()内则会调用Looper.prepareMainLooper()为主线程生成1个Looper对象,同时也会生成其对应的MessageQueue对象,

即主线程的Looper对象自动生成,不需手动生成;而子线程的Looper对象则需手动通过Looper.prepare()创建

在子线程若不手动创建Looper对象 则无法生成Handler对象

根据Handler的作用(在主线程更新UI),故Handler实例的创建场景 主要在主线程

生成Looper & MessageQueue对象后,则会自动进入消息循环:Looper.loop(),即又是另外一个隐式操作

当创建Handler对象时,则通过 构造方法 自动关联当前线程的Looper对象 & 对应的消息队列对象(MessageQueue),从而 自动绑定了 实现创建Handler对象操作的线程。

消息循环的操作 = 消息出队 + 分发给对应的Handler实例

分发给对应的Handler的过程:根据出队消息的归属者通过dispatchMessage(msg)进行分发,最终回调复写的handleMessage(Messagemsg),从而实现 消息处理 的操作

特别注意:在进行消息分发时(dispatchMessage(msg)),会进行1次发送方式的判断:

若msg.callback属性不为空,则代表使用了post(Runnable r)发送消息,则直接回调Runnable对象里复写的run()

若msg.callback属性为空,则代表使用了sendMessage(Message msg)发送消息,则回调复写的handleMessage(msg)

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