异常: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. 机器狗背上枪成了无人杀手,6.5mm口径1200米射程,制造商已与美澳军队广泛合作...
  2. jQuery 事件绑定
  3. 无法载入增效工具_作业大队工具车间利用修旧赚“钱”
  4. 关于serialVersionUID的说明
  5. SAP 电商云 Spartacus UI 同 SAP Customer Data Cloud 的集成
  6. 《四世同堂》金句摘抄(四)
  7. [css] 写一个动画,向上匀速移动100px,向下以1.5倍速度移动200px,一直反复循环
  8. SpringBoot在项目中基本配置设置
  9. 利用Python读取外部数据文件
  10. PC-启动慢的解决好方法!
  11. 【求职】360 C++反向面经
  12. uni-app开发中的#ifdef MP是什么意思?条件编译
  13. 调侃腾讯和360的小段子
  14. 简单excel宏工具对数据进行脱敏
  15. 小麦苗的微信公众号开通啦,欢迎大家扫码关注
  16. 吉大19年9月计算机应用,吉大19年9月《计算机应用基础》作业考核试题(100分)
  17. HTTP状态码常见的状态码!
  18. echarts数据多项(多维度)数据展示,多个series
  19. 手机端input[type=date]的时候placeholder不起作用解决方案
  20. 简单的golang游戏服务器框架《railgun》的文档目录索引

热门文章

  1. 回溯算法高效解标准数独(MarkDown)
  2. ios visio流程图_Mac下有如Visio一样好用的流程图软件吗?
  3. Mysql分页查询出现重复数据
  4. linux查看日志内存,linux查看日志、磁盘、cpu、内存使用情况及清理磁盘,日志等。你需要的linux常用基本操作都在这里!!!...
  5. 微信推送封面尺寸_【新媒体干货】微信公众号封面图设计规范试行版
  6. wordpress基础插件开发3-add_action()案例研究
  7. Autojs.pro 7.0 - 免root 连点器
  8. matlab插值实验目的,matlab插值实验报告数学实验.doc
  9. mysql 1031_MySQL5.6数据导入MySQL5.7报错:ERROR 1031 (HY000)
  10. windows命令提示符运行.cpp文件