java.lang.RuntimeException: 将消息发送到死的线程上处理程序的处理程序 (android.os.Handler)

Android Handler机制详解:线程通信与消息处理 线程通信是Android开发中的基础概念,Handler作为实现线程间通信的核心组件,通过消息队列机制实现跨线程任务调度。其工作原理基于Looper循环和MessageQueue队列,确保UI线程与工作线程的安全交互。在性能优化方面,Handler支持消息合并、优先级管理等技术手段,广泛应用于UI更新、定时任务等场景。针对内存泄漏问题,推荐使用静态内部类+弱引用的解决方案。现代Android开发中,虽然Kotlin协程、RxJava等新技术提供了替代方案,但Handler在底层系统通信、精确消息控制等场景仍 阅读详情

在我的应用程序中我使用 IntentService 的发送短信。

    @Override
protected void onHandleIntent(Intent intent) {
    Bundle data = intent.getExtras();
    String[] recipients = null;
    String message = getString(R.string.unknown_event);
    String name = getString(R.string.app_name);
    if (data != null && data.containsKey(Constants.Services.RECIPIENTS)) {
        recipients = data.getStringArray(Constants.Services.RECIPIENTS);
        name = data.getString(Constants.Services.NAME);
        message = data.getString(Constants.Services.MESSAGE);
        for (int i = 0; i < recipients.length; i++) {
            if(!StringUtils.isNullOrEmpty(recipients[i])) {
                try {
                    Intent sendIntent = new Intent(this, SMSReceiver.class);
                    sendIntent.setAction(Constants.SMS.SEND_ACTION);
                    PendingIntent sendPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, sendIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                    Intent deliveryIntent = new Intent(this, SMSReceiver.class);
                    deliveryIntent.setAction(Constants.SMS.DELIVERED_ACTION);
                    PendingIntent deliveryPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveryIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                    SmsManager.getDefault().sendTextMessage(recipients[i].trim(), null, "[" + name + "] " + message, sendPendingIntent, deliveryPendingIntent);
                } catch (Exception e) {
                    Log.e(TAG, "sendTextMessage", e);
                    e.printStackTrace();
                    Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
                    MainActivity.instance.writeToLogFile(e.getMessage(), System.currentTimeMillis());                       
                }
            }
        }
    }
}
ecTransact(Binder.java:351)
W/MessageQueue(7180):   at dalvik.system.NativeStart.run(Native Method)

我的 SMSReceiver 位于另一个类。我怎样才能解决这个问题?

解决方法 1:

这里的问题是创建的 Toast 里面都由一个线程 IntentService 。该系统将使用 Handler 与此线程显示和隐藏关联 Toast 。

第一次 Toast 将显示正确,但当系统试图隐藏它之后, onHandleIntent 方法完成,因为将引发"将消息发送到死的线程上处理程序"的错误中至极的线程 Toast 创建的不再是有效的和 Toast 不会消失。

若要避免此应显示 Toast 发布一条消息到主线程。下面是一个示例:

    // create a handler to post messages to the main thread
    Handler mHandler = new Handler(getMainLooper());
    mHandler.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
        }
    });

安卓Messenger跨进程双向通信 要实现IPC(跨进程通信),可以使用官方给我们提供的Messenger机制和AIDL机制。 其中Messenger使用简单,适用于大部分多进程、单线程的应用, AIDL适用于较为复杂的多进程、多线程的应用。 这里我们介绍Messenger的用法,其底层也是使用AIDL实现的。 来看下Messenger用法 Reference to a Handler, which others can use ... 阅读详情

相关推荐

常见的数值积分方法 (欧拉、中值、龙格-库塔,【常用于IMU中】)

1. 积分基本概念 设F(x)为函数f(x)的一个原函数,我们把函数f(x)的所有原函数F(x)+C(C为任意常数)叫做函数f(x)的不定积分(indefiniteintegral)。 非线性微分方程: 在有限的时间间隔Δt积分: 连续时间内积分: 工程上最常见的有三种:欧拉积分(Euler method)、中值积分(Midpoint method)和龙格-库塔法积分(Runge–Kutta methods)。他们的区别就是如何用数值方法模拟一个斜率。这里简单总结如下: ...

努力努力努力 2万+

java runtime 异常_java中的java.lang.RuntimeException异常怎么解决?

展开全部解决方式如下:1、通配符{1}修改为{0}。2、form提交地址62616964757a686964616fe59b9ee7ad9431333365633865修改下:注册Form地址:登录Form地址:Java语音特征:Java编程语言的风格十分接近C语言、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指...

weixin_29439509的博客 2万+

从零上手:基于英飞凌TC377的UDE STK 5.0实战调试指南

本文详细介绍了基于英飞凌TC377芯片和UDE STK 5.0的实战调试指南,涵盖硬件连接、工作空间配置、程序烧录、多核调试等关键步骤。特别针对汽车电子领域常见的多核架构调试难题,提供了断点设置、变量监控等实用技巧,帮助开发者快速上手并优化调试效率。

weixin_30839881的博客 685

java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...

在我的应用程序中,我使用IntentService发送短信。@Overrideprotected void onHandleIntent(Intent intent) {Bundle data = intent.getExtras();String[] recipients = null;String message = getString(R.string.unknown_event);Stri...

weixin_29643235的博客 371

Spring AI 实战:如何使用 MCP Server 搭建 MCP 天气查询服务

MCP(Model Context Protocol)是 Anthropic 提出的一种开放协议,它定义了AI 模型与外部世界交互的标准方式。通俗地说:大模型本身只拥有训练数据中的知识,它不知道今天的天气、无法查询你的数据库、不能调用你的内部 API。MCP 就是解决这个问题的"桥梁"——它让模型能够发现并使用外部工具(Tools),就像人用手去操作工具一样。角色职责对应依赖MCP Server暴露工具(Tool),供模型调用MCP Client连接 Server,让模型发现和使用工具本文我们先聚焦。

SmartSi 763

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 734

统一异常处理@ExceptionHandler

有时候我们想统一处理一个Controller中抛出的异常怎么搞呢? 直接在Controller里面加上用@ExceptionHandler标注一个处理异常的方法像下面这样子 @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) publ

liujia120103的博客 5万+

构建个体结构脑网络的另一种方法

这篇文献提出了一种构建个体结构脑网络的方法即Morphometric INverse Divergence (MIND),通过T1像数据即可对每个被试构建一个脑网络,且通过多个特征进行构建而非单一的特征。即可获得由4个特征得到的个体结构网络矩阵,可以根据自己的需求采用不同的特征组合得到网络矩阵,也可以结合T1/T2像得到髓鞘化相关的网络矩阵,后续可修改代码批量处理自己的数据。这是文献贴出来的代码。在终端直接克隆到本地。2.修改路径运行代码。

weixin_52073820的博客 824

java.lang.RuntimeException: Can't create handler inside thread that has not

在子线程中 调用了这句: Toast.makeText(UiUtils.getContext(), "正在下载"+name, Toast.LENGTH_SHORT).show(); 报出了下面的错误 08-15 14:52:50.368 3517-3560/com.ldw.marketm E/AndroidRuntime: FATAL EXCEPTION: pool-2-thread-5...

augfun的博客 5159

合肥工业大学操作系统实验9

依据操作系统课程所介绍的页面置换算法与动态内存分配的原理,本实验的目的是掌握OPT、FIFO、LRU、LFU、Clock等页面置换算法;掌握可用空间表及分配方法;掌握边界标识法以及伙伴系统的内存分配方法和回收方法。从而深入理解操作系统的内存管理。从而加深对教材上页面置换算法与动态内存分配的理解。

Martin-share的博客 1096

android13删除录屏权限提示框-去除录屏提示

在Android 13中,当应用请求屏幕录制权限时,系统会弹出一个权限提示框,要求用户明确授权。这个提示框是为了增强用户隐私保护,让用户知道有应用尝试录制屏幕。但是,在某些情况下,开发者可能希望避免显示这个提示框,以提供更流畅的用户体验。本文将介绍如何在Android 13中删除录屏权限提示框。

zhutoubenben的专栏 1880

Android Handler体系部分源码学习

先来看一下Handler的基本流程: (1)先分析第一部分的代码 Looper.prepare(): private static void prepare(boolean quitAllowed) {     if (sThreadLocal.get() != null) {         throw new RuntimeException("Only one L

a641324093的专栏 393

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 181

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

(1) Looper类用来为一个线程开启一个消息循环。 默认情况下Android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环) Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。   (2) 通常是通过Handler对象来与Looper交

cxcbupt 4731

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java.lang.RuntimeException: Handler (android.os.Handler) sending message to a Handler on a dead thre

1 问题描述 app内部切换Activity或者Fragment都会出现 java.lang.RuntimeException: Handler (android.os.Handler) sending message to a Handler on a dead thread 2 问题分析 google找到类似问题,基本都是以下情况: http://stackoverflo

克里斯的一小步 8573

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java.lang.RuntimeException: Handler{405c1180} sending message to a Handler on a dead thread

W/MessageQueue(4061): java.lang.RuntimeException: Handler{405c1180} sending message to a Handler on a dead thread W/MessageQueue(4061): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:196

jiangxl110的专栏 3160

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android 7.0及以上主线程上的一个TCP Socket的写入操作严格检查导致报错无法给服务器发送socket消息 Can't create handler inside thread tha

        由于之前的Android版本中的一项错误,系统没有对主线程上的一个TCP Socket的写入操作严格检查。 Android 7.0修复了这个系统错误。之前有这种行为的App将会引发android.os.NetworkOnMainThreadException。 一般情况下,不建议在主线程上执行网络操作,因为这些操作通常都有可能导致ANR和卡顿。同时在子线程中new Handler报...

八戒卖萌的博客 1645

Can‘t create handler inside thread Thread*** that has not called Looper.prepare()

Android非UI主线程中,若干普通Java线程使用Handler发送接收消息线程1和线程2均为普通Java线程,在Android中创建,然后在这两个普通Java线程中使用Handler发送和接收消息。import android.os._java handler 非主线程。做一个简单的关于Handler,Looper,Message的小演示,代码主界面一个Button按钮,点击发送消息(累计)给线程的Looper循环,然后在LogCat中打印出来:package zhangphil.looper;

Zhang Phil 2684

Android应用程序消息处理机制(Looper、Handler)分析

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例,应用程序的主线程不断地从这个消息队例中获取消息(Looper),然后对这些消息进行处理(Handler),这样就实现了通过消息来驱动应用程序的执行,本文将详细分析Android应用程序的消息处理机制。 前面我们学习Android应用程序中的Activity启动(Android应用程序启动过程源代码分析和An...

mmdev 102

Can’t create handler inside thread that has not called Looper.prepare()

问题: 最近在做一个使用SIP通话的客户端。在程序启动的时候要启动蓝牙设备,以连接蓝牙耳机等。 当在一个Thread中调用蓝牙初始化的方法时出现如下的错误: publicstatic void init() { if(ba == null) { ba = BluetoothAdapter.g

scyatcs的专栏 1554

@ExceptionHandler的执行顺序以及@ExceptionHandler源码分析

@ExceptionHandler的执行顺序以及@ExceptionHandler源码分析,了解@ExceptionHandler注解的方法,加载和匹配异常处理方法的原理dubbo调用时,会对抛出的异常进行一次过滤器封装处理可以通过重写dubbo的ExceptionFilter和改变业务异常包ServiceExcepiton的方式来达到我们返回自定义异常信息给dubbo调用端的目的。

weixin_42000891的博客 2496

RuntimeException运行时异常

RuntimeException运行时出现的各种异常 派生于RuntimeException的异常,如被 0 除、数组下标越界、空指针等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。 因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理) 这类异常通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需...

程小白的博客 2203

Spring的@ExceptionHandler注解使用方法

目录 1,基本使用方法 2,注解的参数 3,就近原则 4,注解方法的返回值 5,错误的操作 1,基本使用方法 Spring的@ExceptionHandler可以用来统一处理方法抛出的异常,比如这样: @ExceptionHandler() public String handleExeption2(Exception ex) { System.out.println("抛异常了:" + ex); ex.printStackTrace(); String resultS...

wang19890314的专栏 1998

Resources$NotFoundException、Fatal Exception: java.lang.RuntimeException之【应用崩溃闪退,可能真不是你的锅】

【转载请注明出处:From李诗雨—】 不诗意的女程序猿不是好厨师~ 今天经理说用户反馈了一个问题,要求尽快找到原因并修改。这次的这个问题真的令人很无语。。。(当然,还好我聪明伶俐,所以并没有被坑的很惨。) 【问题是这样的】: 在点击“添加绑定”进入二维码扫描页时会出现崩溃闪退,用户的手机是vivo手机和锤子手机。 【崩溃信息是这样的】: 【粗略分析】: 从崩溃信息来看应该是Zxing中的一...

cjm2484836553的博客 1400

SpringMVC--异常处理

给方法上随便写一个Exception,用来接收发生的异常 要携带的异常信息不能给参数位置写Model 返回ModelAndView就行 如果有多个@ExceptionHandler都能处理这个异常,精确优先 全局异常处理与本类同时存在,本类优先 Spring MVC处理异常有3种方式: 1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; 2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;.

weixin_41978551的博客 876
上一篇: 缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的
下一篇: Android线程优先级
闲暇部落
博客等级 码龄12年 2779粉丝 215原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲暇部落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值