异常:Handler sending message to a Handler on a dead thread

当我们在使用Thread和 Handler 进行线程操作的时候会发生 异常,错误信息包含 IllegalStateException: Handler (android.os.Handler) sending message to a Handler on a dead thread一般出现这种错误意味着在 Handler 进行 postMessage / post 操作的时候,Lopper 中的 MessageQueue 队列对象空了。这个异常我们可以在MessageQueue的enqueueMessage方法中看到,当消息队列为空的时候,mQuitting就是true了,再次发送的话就会报异常。

我在项目中遇到是因为在某一调用quit()方法之后,再次发送message,导致的,这里有的人说在发送之前重新初始化话Handler,但是即使quit之后重新初始化也无法再次使用HandlerThread,这里我才用的方法是通过使用反射方法,重新初始化 Looper 的 mQueue的值,如下代码

public void sendCancelConvertMsg(){/*** 这里通过反射解决异常:Handler sending message to a Handler on a dead thread*/Field messageQueueField = null;try {messageQueueField = Looper.class.getDeclaredField("mQueue");messageQueueField.setAccessible(true);Class<MessageQueue> messageQueueClass = (Class<MessageQueue>) Class.forName("android.os.MessageQueue");Constructor<MessageQueue>[] messageQueueConstructor = (Constructor<MessageQueue>[]) messageQueueClass.getDeclaredConstructors();for(Constructor<MessageQueue> constructor : messageQueueConstructor){constructor.setAccessible(true);Class[] types = constructor.getParameterTypes();for(Class clazz : types){if(clazz.getName().equalsIgnoreCase("boolean")){messageQueueField.set(mConvertHandler.getLooper(), constructor.newInstance(true));break;}}}} catch (Exception e) {e.printStackTrace();}mConvertHandler.sendEmptyMessage(MESSAGE_CONVERT_CANCEL);}

异常:Handler sending message to a Handler on a dead thread相关推荐

  1. 【Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★

    文章目录 一.Message 消息 二.Handler 消息处理者 三.MessageQueue 消息队列 四.Looper 循环者 五.关于 Looper 线程本地变量的说明 一.Message 消 ...

  2. java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand

    java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand ...

  3. android message 代码,Android Handler移除Message详解及实例代码

    Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...

  4. Android基础架构:Native层 Looper、Handler、Message 研究

    Android基础架构:Native层 Looper.Handler.Message 研究1,参考: https://www.cnblogs.com/roger-yu/p/15099541.html ...

  5. 【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )

    文章目录 一.Handler 构造函数 二.Handler 消息分发 三.MessageQueue 消息队列相关函数 一.Handler 构造函数 一般使用 Handler 时 , 调用 Handle ...

  6. 再探Handler(上)(Handler核心原理最全解析)

    很久之前也写过Handler的相关文章,现在回过头去看,理解的还是较为浅薄.于是乎,决定再来深入研究一遍Handler. 首先抛出一个问题:子线程到主线程的通信方式有哪些?子线程到主线程通信的原理是什 ...

  7. handler 与message的一些理解

    观点一: Android 对进程的重要性评级的时候,选取它最高的级别.另外,当被另外的一个进程依赖的时候,某个进程的级别可能会增高.一个为其他进程服务的进程永远不会比被服务的进程重要级低.因为服务进程 ...

  8. 深入理解Handler、Message、MessageQueue、Looper

    本文是从源码的角度对andorid异步消息处理机制的梳理,那么在文章开始阶段,先简单介绍,异步消息处理机制中各部件的作用以及处理处理机制的概述 1.Handler.Message.MessageQue ...

  9. Message、Handler、Message Queue、Looper之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制.Message Queue(消息队列), 线程间的通信 ...

  10. Android 中Message,MessageQueue,Looper,Handler详解+实例

    一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最多只可以拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自 ...

最新文章

  1. 【2021-12-06】爬取关键词图片 - 去掉重复图片
  2. 网站被黑搜索快照被劫持怎么办
  3. JavaScript 笔记(2) -- 类型转换 正则表达 变量提升 表单验证
  4. 201807 相关性度量的几种方法-卡方检验、相关系数、信息增益...
  5. 游戏服务器的架构演进
  6. Windows10系统Python2.7通过Swig调用C++过程
  7. Virut样本取证特征
  8. 2、Shiro的认证
  9. duplicate复制数据库
  10. 字符编码——简体中文编码中区位码、国标码、内码、外码、字形码的区别及关系
  11. 使用QPainter绘制饼状图,并显示所占百分比
  12. 【python】用ChatGPT使用爬虫
  13. esp寄存器与ebp寄存器介绍
  14. ORACLE中的日期相减
  15. 动态站点:部署论坛系统Discuz!
  16. 今天推荐一下网友张迪的博客
  17. MyZip Pro for Mac一款专业解压缩软件,解压缩速度超级快。
  18. 怎么通过外网来访问自己在Tomcat服务器中配置的项目
  19. 景区怎么防止年票卡多人使用?
  20. 爬虫项目实操二、爬取“下厨房”网站的菜名、所需材料、和菜名所对应的详情页URL

热门文章

  1. cad批量逐个填充lisp,效率提高之CAD如何自动批量导出文本
  2. 网卡驱动DM9000-基于uboot
  3. 按键精灵---大漠完美注册
  4. mysql查询有什么意义_mysql分页查询有什么作用
  5. mysql分页查询公式
  6. FFmpeg基础:视频流转图片
  7. Darklabel多目标跟踪标注工具
  8. 安装scipy报错的解决方案
  9. 理论力学知识要点(五)
  10. java DFS与BFS算法