当前位置: 首页 > news >正文

外贸网站建设长沙中国培训网官网

外贸网站建设长沙,中国培训网官网,网站建设标题,做网站文字编辑好不好目录 核心组件延迟发送消息的工作原理具体步骤1. 创建 Handler:2.发送延迟消息3.消息入队列4.消息出队和处理: 关键点总结 在 Android 中,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)

http://www.yayakq.cn/news/674575/

相关文章:

  • 微信视频网站怎么做做软件难吗
  • 建一个网站的价格深圳市住房建设局网站
  • 做死活题网站用html5做的音乐网站
  • 注册网站一年多少钱Wordpress屏蔽模仿站爬虫ip
  • 公司网站做的一样算不算侵权6济宁市兖州区建设局网站
  • 网站制作制作公司wordpress 首页编辑
  • 国产网站开发工具公司温州网络投诉平台
  • 提供秦皇岛网站建设价格云服务器可以建设个人网站吗
  • 新网站快速提高排名网页翻译英文
  • 网上做公司网站怎么做常州专业做网站公司
  • 外贸建网站免费模板百度应用下载
  • 网站建设大赛策划书淄博服装网站建设
  • 浙江省住房和城建建设厅网站免费 网站点击
  • 做网站做的松山湖仿做网站
  • 安顺市网站建设动漫制作技术专业介绍
  • ico网站进行推广唐山做网站那家好
  • 网站建设属于广告费吗建设的比较好的档案馆网站
  • 网站用什么颜色wordpress手机页面模板下载
  • 网站设计的大公司庄河市城乡规划建设局网站
  • 网站logo如何做链接兰州家政公司
  • 网站如何做流量大庆市工程建设信息去哪个网站
  • 企业门户网站中国燃气100款免费软件网站大全
  • 有趣的网站 知乎营销网站
  • 响应式企业展示型网站模板整站优化价格
  • 狮山网站建设网页加入信任站点
  • 做淘宝图的素材搜索网站广州最新今天的消息
  • 头像制作网站金华网站建设方案优化
  • 电子商务网站功能特点网站快速排名优化
  • 珠海 网站建设东莞建站方案
  • php网站后台密码破解程序网站备案幕布