wordpress优化网站,wordpress静态连接选择,网站qq临时会话不需要添加好友,wordpress 弹性布局设计案例目录 核心组件延迟发送消息的工作原理具体步骤1. 创建 Handler:2.发送延迟消息3.消息入队列4.消息出队和处理: 关键点总结 在 Android 中#xff0c;Handler 是用于在不同线程之间传递和处理消息的工具。它可以用于定时任务、延迟执行任务等。Handler 如何保证延迟发送消息的核… 目录 核心组件延迟发送消息的工作原理具体步骤1. 创建 Handler:2.发送延迟消息3.消息入队列4.消息出队和处理: 关键点总结 在 Android 中Handler 是用于在不同线程之间传递和处理消息的工具。它可以用于定时任务、延迟执行任务等。Handler 如何保证延迟发送消息的核心在于其与 MessageQueue 和 Looper 的协同工作。 核心组件
Handler: 用于发送和处理消息和可运行的任务Runnable。MessageQueue: 消息队列存储所有待处理的消息。Looper: 循环从 MessageQueue 中取出消息并分发给相应的 Handler 进行处理。
延迟发送消息的工作原理
当你使用 Handler 的 postDelayed 或 sendMessageDelayed 方法时消息会被添加到 MessageQueue 中并带有一个指定的时间戳。Looper 会根据时间戳来决定何时处理这些消息。
具体步骤
1. 创建 Handler:
通常在主线程中创建一个 Handler它会与主线程的 Looper 和 MessageQueue 关联。 Handler handler new Handler(Looper.getMainLooper());2.发送延迟消息
使用 postDelayed 或 sendMessageDelayed 方法发送延迟消息或任务。 // 延迟 2000 毫秒后执行 Runnable 任务handler.postDelayed(new Runnable() {Overridepublic void run() {// 执行任务}}, 2000);// 延迟 2000 毫秒后发送消息Message msg handler.obtainMessage();handler.sendMessageDelayed(msg, 2000);3.消息入队列
Handler 将消息或任务添加到 MessageQueue 中并带有一个执行时间当前时间 延迟时间。 boolean sendMessageAtTime(Message msg, long uptimeMillis) {MessageQueue queue mQueue;if (queue null) {RuntimeException e new RuntimeException(this sendMessageAtTime() called with no mQueue);Log.w(Looper, e.getMessage(), e);return false;}return enqueueMessage(queue, msg, uptimeMillis);}private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {msg.target this;if (mAsynchronous) {msg.setAsynchronous(true);}return queue.enqueueMessage(msg, uptimeMillis);}4.消息出队和处理:
Looper 不断循环从 MessageQueue 中取出时间戳小于等于当前时间的消息进行处理。 public static void loop() {final Looper me myLooper();final MessageQueue queue me.mQueue;for (;;) {Message msg queue.next(); // 可能会阻塞if (msg null) {// No message indicates that the message queue is quitting.return;}// 分发消息msg.target.dispatchMessage(msg);// 回收消息msg.recycleUnchecked();}}关键点
时间戳: 每个消息在入队时都会带有一个时间戳表示该消息何时可以被处理。消息队列排序: MessageQueue 会根据消息的时间戳进行排序确保最早到期的消息最先被处理。循环检查: Looper 会不断循环检查 MessageQueue一旦发现有到期的消息就立即处理。
总结
通过 Handler、MessageQueue 和 Looper 的协同工作Android 可以实现延迟发送消息和任务的功能。Handler 将消息或任务添加到 MessageQueue 中并带有一个执行时间戳。Looper 不断循环检查 MessageQueue当发现有到期的消息时立即取出并处理从而实现延迟执行的效果。
Android 之 Handler HandlerThread 和 Handler 区别 Android之Handler的post方法和sendMessage的区别 Android之同一个Thread线程里只能有一个Looper?(ThreadLocal)