0x00、 Handler

一个 Handler 允许你通过 MessageQueue 发送 Message 和 执行 和 Runable 。 每一个 Handler 实例和一个单独的线程以及该线程的消息队列相关。 当你创建 Handler 的时候 , 这个 Handler 会与 一个 Looper 绑定 . 它会将消息和可运行对象传递到该 Looper 的消息队列,并在该 Looper 的线程上执行它们。

Handler 有两个主要的用途:

  1. 将消息放到 message queue,并在想来的某个事件执行该消息;

  2. 在另一个线程中执行动作。

通过这些方法将 message 安排到日程中:post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, Object, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), 和 sendMessageDelayed(Message, long)。 post 方法允许你将 Runable 对象排到队列中,当 message queue 接收到之后会调用它; sendMessage 允许你将 Message 对象排到队列中,Message 对象中包含一个 bundle 数据包,Handler 的 handleMessage(Message) 方法将会处理这些数据(需要你实现 Hamdler 的一个子类)。

当传递一个消息到 Handler 的时候,只要 message queue 已经被准备停当,你能选择立刻执行这个消息,或者指定延时执行。 后者允许你实现超时,计时,以及其他基于时间的行为。

当系统为你的 app 创建一个进程的时候,它的主线程会专门运行一个 message queue 去管理 app 顶级对象(activities,broacase receivers,等)以及它们创建的 windows。 你能创建你自己的线程并且通过一个 Handler 和 app 的主线程交互。 这个交互动作是通过在新线程中调用 postsendMessage 完成的 . 给定的 Runable 或者 Message 将会被排到 Handler 的 message queue 并且在适当的时候被执行。

Last updated