首页 > 其他分享 >handler机制探究——Spring MVC的Handler

handler机制探究——Spring MVC的Handler

时间:2024-01-31 14:36:55浏览次数:36  
标签:MessageQueue handler Spring MVC Handler 线程 消息 机制 Looper

Handler机制 主要涉及以下几个方面:

  1. Handler类:它是用于处理消息的对象,通常用来在不同的线程之间传递消息。
  2. Message类:这是消息对象,包含了有关消息的数据以及目标处理器的引用。
  3. MessageQueue类:这是一个存储消息的对象,按照一定的顺序排列。
  4. Looper类:它的内部是一个死循环,不断地从MessageQueue中取出消息并进行分发。
  5. HandlerThread类:它用于创建一个新的子线程,在这个子线程中使用Looper来处理消息,从而避免主线程(UI线程)因长时间执行耗时操作而导致卡顿或崩溃。

Handler机制的核心在于它如何在不同线程之间传递消息。当子线程完成耗时操作后,它会创建一个包含数据的新Message对象,然后将其发送到MessageQueue中。Looper会在自己的循环中不断检查MessageQueue是否有新的消息,一旦发现新消息,就会调用dispatchMessage方法来分发这些消息。最终,这些消息会被传递给注册了相应消息处理的Handler。

为了确保线程安全,Handler机制使用了目标(Target)的概念,即每个消息都绑定到一个特定的处理器。这样,即使系统中有很多Handler实例,它们也能正确地处理各自的目标消息。

需要注意的是,为了避免潜在的内存泄漏问题,开发者在使用Handler时应谨慎。例如,如果在某个Activity结束后还有未处理的消息,这可能导致Activity不被及时回收,从而引起内存泄露。为了避免这种问题,可以使用静态内部类或者弱引用来管理Handler的使用,并在不再需要时清除消息队列中的信息。

参考:https://blog.csdn.net/f641385712/article/details/89845181

SpringMVC不用注解的方式,用配置xml的方式

参考:https://blog.csdn.net/u011047968/article/details/103807065

implement Controller

标签:MessageQueue,handler,Spring,MVC,Handler,线程,消息,机制,Looper
From: https://www.cnblogs.com/2008nmj/p/17999180

相关文章

  • SpringBoot 整合多数据源的事务问题
    代码先贴代码:核心就是:Spring给我们提供的一个类AbstractRoutingDataSource,然后我们再写一个切面来切换数据源,肯定要有一个地方存储key还要保证上下文都可用,所以我们使用ThreadLocal来存储数据源的keypom.xml<dependency><groupId>org.springframework.boot</gr......
  • 对比Spring Boot中的JdbcClient与JdbcTemplate
    本文我们一起看看SpringBoot中JdbcClient和JdbcTemplate之间的差异。以下内容使用的Java和SpringBoot版本为:Java21SpringBoot3.2.1假设我们有一个ICustomerService接口:publicinterfaceICustomerService{List<Customer>getAllCustomer();Option......
  • createDelegatingPasswordEncoder只有在spring 5.1.13才能用吗?
    springboot和spring版本对应关系:SpringBoot1.x支持SpringFramework4.x系列,包括4.0、4.1、4.2和4.3等版本。SpringBoot2.x支持SpringFramework5.x系列,包括5.0、5.1和5.2等版本。 下载springboot会一并下载 ......
  • Java21 + SpringBoot3整合springdoc-openapi,自动生成在线接口文档,支持SpringSecurity
    目录前言相关技术简介OpenAPISwaggerSpringfoxspringdocswagger2与swagger3常用注解对比实现步骤引入maven依赖修改配置文件设置api-docs和swagger-ui访问权限定义springdoc配置类修改Controller类和实体类查看效果总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • springboot~logback控制日志文件大小与历史个数
    日志本地化,对于每个应用来说都是必须的,最起码第一时间日志是需要本地化的,然后从本地化的日志中再进行推送,例如通过fluentd将日志推到es里,通过kibana工具进行可视化分析。日志文件大小限制对于把日志持久化到磁盘,你需要设置它的占用空间,logback提供了保存文件大小和历史文件数量......
  • Spring 事务管理 基于配置文件
    事务概念:原子性:要么都成功,有一个失败都失败一致性:总量不变(A有100元,B有100元,总量是200元。A把100元转给B,B就有了200元,总量还是200元)隔离性:两人操作同一条数据,不会相互影响持久性:最终提交到数据库后成功搭建事务操作环境进行操作():银行转账例子:1.1、创建数据库,创建表,添加......
  • SpringBoot、SpringCloud相关技术
    一、三层架构 1.1统一业务处理1.2解决三层架构中的结偶,使用了Ioc(控制反转)和DI(依赖注入) 1.3切面编程、事务处理、全局异常处理、Cookie、Session、JWT令牌、阿里云OSS、Mybatis处理数据库二、技术分类说明  2.1SSM三、Web总结四、相关第三方插件https://www......
  • SpringBoot自定义注解+反射实现 excel 导入的数据组装及字段校验
    本次给大家带来的SpringBoot中通过自定义注解+反射实现excel导入数据组装及字段校验的实现方式。这种实现方式其实是很普通、常规的方法,但很多同学在开发过程中,可能却不太容易想到他。当然我也是众多同学中的一员。1背景在前段时间的开发工作中,接手了一个很简单,很普通的开发任务。......
  • 在@KafkaListener启动之前需要做数据的预加载,该在Spring生命周期的哪个阶段做这个事情
    背景说明1、在Spring中消费Kafka数据时,最便捷的方法就是给方法加@KafkaListener注解。在数据消费逻辑中,需要先把一些配置信息预加载到内存中。有同事就提了一个问题:如果保证在消费者执行前,预加载数据的代码一定能执行完?也就是说,要等待数据预加载完成之后,再执行消费逻辑。大部分......
  • Mybatis-plus分页查询(SpringBoot)
    2024-01-30OS:Windows10 22H2IDE:IDEA2022.2.5JDKversion:19Mavenversion:3.6.3数据库:MySQL8.1.0mybatis-plus:3.5.3.1 一、在springBoot启动类中将分页插件加入到ioc容器里面启动类 @SpringBootApplication@MapperScan("com.ssm.mapper")publicclassMain{......