## Handler 简介(全文基于 API 27)
public class Handler
extends Object
它的子类有:
AsyncQueryHandler, AsyncQueryHandler.WorkerHandler, HttpAuthHandler, SslErrorHandler
Handler 允许您发送和处理与线程的MessageQueue相关联的消息和可运行对象。每个Handler实例都与单个线程和该线程的消息队列相关联。当您创建一个新的Handler时,它被绑定到创建它的线程/消息队列-从那时起,它将把消息和运行程序传递到消息队列中,并在它们从消息队列中取出来时执行它们。
处理程序有两个主要用途: (1) 为 messages 和 runnables 未来的调用制定计划;(2) 为不同线程上的操作排序。
通过如下方法调度Message:
post(Runnable), postAtTime(Runnable, long),
postDelayed(Runnable, Object, long),
sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long),
and sendMessageDelayed(Message, long)
post 版本允许您在接收到消息队列时排序可运行的对象。sendMessage 版本允许您排序一个 Message 对象, 这个对象包含将由
handler的 handleMessage (Message) 方法处理的数据包 (要求您实现Handler的子类)。
在传递或发送到 Handler 前, 您可以允许在消息队列准备就绪后立即处理该项, 或者在处理之前指定延迟, 或将其处理为绝对时间。 后两个允许您实现超时、定时和其他基于计时的行为。
为应用程序创建进程时, 其主线程专用于运行一个消息队列, 负责管理顶级应用程序对象 (活动、广播接收器等) 及其创建的任何窗口。您可以创建自己的线程, 并通过处理程序与主应用程序线程进行通信。这是通过调用与以前相同的 post 或 sendMessage 方法, 而是从新线程中完成的。然后, 将在处理程序的消息队列中计划给定的可运行或消息, 并在适当时进行处理。
##Handler的四个构造方法:
>*如果该线程没有一个 Looper,这个 handler 将无法接收消息,因此抛出异常。*
- Handler()
- 默认的构造器,将当前线程的 handler 与 Looper 相关联
- Handler(Handler.Callback callback)
- 多了一个回调接口,用来处理回调的 messages
- Handler(Looper looper)
- 用提供的 looper 代替默认的
- Handler(Looper looper, Handler.Callback callback)
- 回调 looper 和 messages
## Handler 的公共方法:
- static Handler createAsync(Looper looper, Handler.Callback callback)
- 创建一个新的处理程序, 其发布的 messages 和 runnables 不受同步屏障 (如显示 vsync) 的限制。
- static Handler createAsync(Looper looper)
- 创建一个新的处理程序, 其发布的 messages 和 runnables 不受同步屏障 (如显示 vsync) 的限制。
- void dispatchMessage(Message msg)
- 在这里处理 message 消息
- final void dump(Printer pw, String prefix)
- final Looper getLooper()
- String getMessageName(Message message)
- 返回表示指定消息名称的字符串
- void handleMessage(Message msg)
- 子类必须实现此项才能接收消息。
- final boolean hasMessages(int what)
- 检查是否有带有 ‘what’ 属性的 messages 发布
- final boolean hasMessages(int what, Object object)
- 检查是否有带有 ‘what’ 属性并且其 obj 是 ‘object’ 的 messages 发布
- final Message obtainMessage(int what, Object obj)
- 与 obtainMessage () 相同, 只是它还设置返回消息的内容和 obj 成员。
- final Message obtainMessage()
- 从全局消息池返回新消息。
- final Message obtainMessage(int what, int arg1, int arg2)
- 与 obtainMessage () 相同, 只是它还设置返回消息的内容、arg1 和 arg2 成员。
- final Message obtainMessage(int what, int arg1, int arg2, Object obj)
- 与 obtainMessage () 相同, 只是它还设置返回消息上的 arg1,and arg2 值。
- final Message obtainMessage(int what)
- 与 obtainMessage () 相同, 只是它还设置了返回消息的成员。
- final boolean post(Runnable r)
- 使可运行的 r 添加到消息队列中。
- final boolean postAtFrontOfQueue(Runnable r)
- 向实现可运行的对象发送消息。
- final boolean postAtTime(Runnable r, long uptimeMillis)
- 使可运行的 r 被添加到消息队列中, 以便在 uptimeMillis 给定的特定时间执行。
- final boolean postAtTime(Runnable r, Object token, long uptimeMillis)
- 使可运行的 r 被添加到消息队列中, 以便在 uptimeMillis 给定的特定时间执行。
- final boolean postDelayed(Runnable r, long delayMillis)
- 使可运行的 r 被添加到消息队列中, 以便在经过指定的时间后执行。
- final boolean postDelayed(Runnable r, Object token, long delayMillis)
- 使可运行的 r 被添加到消息队列中, 以便在经过指定的时间后执行。
- final void removeCallbacks(Runnable r)
- 移除消息队列中等待的 Runnable 对象 r
- final void removeCallbacks(Runnable r, Object token)
- 移除消息队列中等待的带有 token 的 Runnable 对象 r
- final void removeCallbacksAndMessages(Object token)
- 删除所有待处理的回调帖子并发送其 obj 为令牌的消息。
- final void removeMessages(int what)
- 移除所有带有 what 参数的 等待中的 messages
- final void removeMessages(int what, Object object)
- 移除所有带有 what 参数及 object 参数的 等待中的 messages
- final boolean sendEmptyMessage(int what)
- 发送空的消息。
- final boolean sendEmptyMessageAtTime(int what, long uptimeMillis)
- 在指定时间发送只包含 what 参数的空消息。
- final boolean sendEmptyMessageDelayed(int what, long delayMillis)
- 在延迟指定时间之后发送只包含 what 参数的空消息。
- final boolean sendMessage(Message msg)
- 将 message 推送到当前消息队列的末尾
- final boolean sendMessageAtFrontOfQueue(Message msg)
- 将 message 推送到当前消息队列的首位
- boolean sendMessageAtTime(Message msg, long uptimeMillis)
- 将 message 在指定时间 uptimeMillis 推送到消息队列中
- final boolean sendMessageDelayed(Message msg, long delayMillis)
- 将 message 在延迟指定时间 delayMillis 之后推送到消息队列中
- String toString()
- 返回对象的字符串表示形式。