Handler 官方文档翻译

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()
    • 返回对象的字符串表示形式。

猜你喜欢

转载自blog.csdn.net/baidu_33221362/article/details/80888704
今日推荐