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)

你可能感兴趣的:(Handler原理)