Android Handler

Handler用于多线程消息分发和处理。与handler相关的几个对象:Message, Looper,MessageQueue, ThreadLocal.

Handler是Message的消费者。

MessageQueue是容器。

Looper是整个Message分发的驱动。

Handler中有多种发送消息的方法,其中postxxx的传参为Runable,sendxxx的传参为Message.

postxxx本质都调用sendxxx。sendxxx最终会调用MessageQueue的enqueueMessage。

 Handler的基本使用方式如下。

Looper会帮助当前的线程创建一个message queue和looper,来驱动消息传递。

Looper.loop()则会阻塞进程,当收到消息时再触发进程。(Looper.loop()后的代码不会被执行)。

从代码中可以看出,连续两次Looper.prepare,会报错。

ThreadLocal是一个Map<key, value>。key为当前线程。所ThreadLocal.get(),是以当前线程为key做检查。如果有value,则表示loop已创建。

所以,一个线程里有一个looper,一个looper对应一个messageQueue。

但Handler可以有多个,可以传递不同结构的message,并处理对应的message。

Message中,包含handler本身,在将Message放入MessageQueue中时,对Message.target进行赋值。

在主进程中,之所以不需要执行Looper.prepare和Looper.loop,是因为主线程中的ActivityThread已经创建了Looper和Handler。

Message创建方式有两种:new Message()和Message.obtain(),区别在于后者使用单向链表。

在消息量大的情况下,前者仅在GC时集中释放内存,会造成内存抖动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8186.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Windows/Linux部署Qt并通过Qt Installer Framework制作安装包

本文参考 Qt Installer Framework Manual。 若要使用 Qt Installer Framework&#xff08;简称 QIF&#xff09;&#xff0c;需要在 Qt Online Installer 或 Qt Maintenance Tool 中确保该组件已安装&#xff08;QIF 组件在 Qt->Developer and Design Tools 下&#xff09;&…

【大数据学习 | kafka】消费者的分区分配规则

1. 概述 上面我们提到过&#xff0c;消费者有的时候会少于或者多于分区的个数&#xff0c;那么如果消费者少了有的消费者要消费多个分区的数据&#xff0c;如果消费者多了&#xff0c;有的消费者就可能没有分区的数据消费。 那么这个关系是如何分配的呢&#xff1f; 现在我们…

【开发】关于Java中String与Integer的小小知识点(使用等号对比引用对象)

一个很简单的小知识点 我们都知道&#xff0c;如果使用对比包装类型或对象&#xff0c;那么比较的都是两者之间的地址&#xff08;指针或句柄&#xff09;&#xff0c;而非对象本身&#xff0c;那么且看下方的代码。 public class A {public static void main(String[] args)…

2025年山东省考报名流程图解

2025年山东公务员考试备考开始 为大家整理了从笔试到录用的全部流程&#xff0c;希望可以帮助到你们&#xff01;参考2024年山东省考公告整理&#xff0c;请以最新公告为准&#xff01; 一、阅读公告和职位表 二、职位查询 三、网上报名 四、确认缴费 五、网上打印准考证 六、参…

网络安全入门篇之详细学习路线

什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&…

什么是大数据治理?在企业数字化转型过程中有什么用?

建设背景 有效的数据治理不仅能够确保数据的安全和质量&#xff0c;还能为企业提供深入的业务洞察&#xff0c;推动决策制定和创新。数据治理是数字化转型的基础&#xff0c;是数据资源成为数据资产的基础&#xff0c;只有经过了数据治理&#xff0c;相应的数据资源才能产生价…

Kalshi PK Polymarket,谁更胜一筹

https://kalshi.com https://polymarket.com/ 在刚过去的2024 美大选中&#xff0c;这两个网站可谓风光无限。这两者究竟有何区别呢&#xff0c;今天咱们一起来扒一扒。 Kalshi与Polymarket主要有以下区别&#xff1a; 监管与合法性方面&#xff1a; Kalshi&#xff1a;经过美…

UI测试还在Selenium,难怪你会被淘汰

一、前言 在UI自动化测试的领域中&#xff0c;Selenium无疑是一颗璀璨的明星&#xff0c;它以其强大的浏览器自动化能力&#xff0c;长期以来一直是众多测试工程师的首选工具。它很经典&#xff0c;地位也毋庸置疑&#xff0c;但也是过去式了&#xff0c;现在我采用的自动化方…

基于ssm的网上药房管理系统的设计与实现(源码+LW+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java的ssm网上药房管…

godot——主题、Theme、StyleBox

我刚开始被这些术语吓到了&#xff0c;一直不敢去接触它们&#xff0c;都用的默认样式。现在好不容易有点思路了&#xff0c;记录下来。 下面看看怎么自定义样式。 1.先新建一个Theme 2.再次点击创建好的Theme 得到 图1 这样一个面板。&#xff08;看不懂没事&#xff0c;继…

如何利用Python API接口实战中高效地获取商品详情信息

在电商数据分析和商品信息集成领域&#xff0c;高效地获取商品详情信息是至关重要的。本文将介绍如何使用Python结合API接口&#xff0c;从淘宝/天猫平台获取商品详情信息&#xff0c;并提供实战代码示例。 一、理解API接口的重要性 API&#xff08;应用程序编程接口&#xff…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim&#xff1a; 1、对vim初步理解&#xff1a; 2、vim的模式&#xff1a; 3、进入与退出&#xff1a; 4、vim命令模式下的指令集&#xff1a; 移动光标&#xff1a; 删除&#xff1a; cv&#xff1a; 撤销&#xff1a; 其他&#xff1a; 5、vim底行模…

不支持UEFI的老显卡修改vBIOS进行支持

前段时间要在办公室玩恐怖黎明,但是联想自带的GT730实在是有点慢,后来闲鱼收了一张HD7750,虽然也是老掉牙,但是性能也有3成提升,聊胜于无吧.但是存在HD7750不支持UEFI的问题.具体表现为: 系统是win11未进系统时,什么都不显示,不能进BIOS.刚换卡未装驱动的时候,即使已经进入系统…

qt QWheelEvent详解

1、概述 QWheelEvent是Qt框架中用于处理鼠标滚轮事件的一个类。当用户滚动鼠标滚轮时&#xff0c;Qt会生成一个QWheelEvent事件&#xff0c;并将其发送到相应的窗口或控件。开发者可以通过重载窗口或控件的wheelEvent()方法来响应这个事件&#xff0c;并执行相应的操作&#x…

如何训练最懂您企业的AI助理?

随着人工智能技术的蓬勃发展&#xff0c;企业级AI助理已成为提升工作效率、优化客户服务体验的重要利器。这些智慧化的系统&#xff0c;通过模拟人类的认知功能&#xff0c;能够轻松应对复杂的数据分析、自动化繁琐的日常任务&#xff0c;甚至为企业决策提供有力支持。拥有一款…

2024网鼎杯web1+re2 wp

这两道题属于比较简单的&#xff0c;顺道说一下&#xff0c;今年的题有点抽象&#xff0c;web不是misc&#xff0c;re不是web的&#xff0c;也有可能时代在进步&#xff0c;现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了&#xff0c;进来疯狂找sql注入&#xff0c…

【Android 系统中使用CallStack类来追踪获取和操作调用栈信息】

Android系统CallStack类的使用 定义使用方法使用场景注意事项应用举例 定义 在 Android 系统中&#xff0c;CallStack 类是一个用于获取和操作调用栈信息的工具类。这个类通常用于调试和日志记录&#xff0c;以帮助开发者了解函数调用的顺序和位置。以下是您提供的代码片段的解…

Vue 组件通信-自定义事件(七)

一、组件自定事件概念 自己定义的事件&#xff0c;包含事件名&#xff0c;事件回调等&#xff0c;定义好之后去给组件使用。也是一种组件的通信方式&#xff0c;适用于子组件传递给父组件。 二、 组件自定义事件实现子传父 1、在父组件中给子组件绑定一个自定义事件 在子组件标…

解决Qt Creator调试“warning: GDB: Failed to set controlling terminal“

本文档详细介绍了在Qt环境中遇到GDB提示Failed to set controlling terminal错误时的解决方案&#xff0c;步骤包括勾选Run in Terminal选项。适合开发者在调试过程中遇到此类问题时参考。 &"warning: GDB: Failed to set controlling terminal: \345\257\271\350\25…

nginx 部署2个相同的vue

起因&#xff1a; 最近遇到一个问题&#xff0c;在前端用nginx 部署 vue&#xff0c; 发现如果前端有改动&#xff0c;如果不适用热更新&#xff0c;而是直接复制项目过去&#xff0c;会404 因此想到用nginx 负载两套相同vue项目&#xff0c;然后一个个复制vue项目就可以了。…