遇到android Handler.sendMessage的一个坑

Handler发送sendMessage和postRunnable的区别       先从平时的应用入手吧。试想这样一个场景,我们有一个下载文件的需求,而且我们在界面上要显示下载的状态:未下载,下载中,已下载。这个时候我们该怎么办?首先可以在界面上放一个Button,显示未下载,然后设置点击事件,点击后显示下载中,并开启一个线程去下载(这里用线程sleep代替,实际未下载)。等下载完成后,再把Button上的文字改为已下载。我们来试一下:   public ... 阅读详情
今天遇到一个android app bug,最后发现copy代码时犯了个错
对同一message调用了两次sendMessage
   {
       String msg=
               "event=CarDetected\r\n"
                       +"car=test"+"\r\n"
                       +"\r\n";

       Bundle b = new Bundle();
       b.putString("msg",msg);

       Message message=Message.obtain();
       message.setData(b);
       mHandler.sendMessage(message);
       try {
           Log.w(TAG,"sendAgagin#1");
           mHandler.sendMessage(message);//这里故意再调用一次,测试发现logcat无任何异常日志,但apk已不能正常运行
           Log.w(TAG,"sendAgagin#2");
       }
       catch (Exception e)
       {
           Log.w(TAG,e.toString());
       }

   }
感觉android应该要能检测到这个错误并在logcat给出提示才好。

 

 

Android Handler消息机制:sendMessage与sendToTarget对比分析 在Android开发中,消息机制是实现线程间通信的核心技术,主要由Handler、Looper和Message构成。其底层原理基于生产者-消费者模型,通过消息队列实现异步处理。从技术实现来看,Handler既负责消息发送也处理消息,而Message作为数据载体,通过复用机制(Message.obtain())优化内存使用。sendMessage和sendToTarget是两种典型的消息发送方式,前者更灵活支持动态路由,后者通过提前绑定Handler提升性能。在UI更新、动画渲染等高频率消息场景中,合理选择发 阅读详情

相关推荐

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

Android Handler消息机制:sendMessage与sendToTarget对比解析

消息机制是Android线程通信的核心技术,通过Handler、MessageQueue和Looper实现跨线程任务调度。其设计采用消息池复用机制提升性能,开发者可通过sendMessage或sendToTarget两种方式发送消息。标准sendMessage提供更灵活的消息目标切换能力,而obtainMessage+sendToTarget组合则具有更简洁的链式调用特性。在UI更新、延迟任务等场景中,合理选择消息发送方式能提升代码可读性并避免内存泄漏。本文深入分析两种实现差异,结合线程安全和性能优化要点,

lvwenwen 385

Android Settings 设置Preference置灰显示

使Preference置灰显示,不能点击。先调用Preference的setEnabled(false),再调用setShouldDisableView(true); 如果使置灰项恢复正常可点击,可调用setEnabled(true)。

随风而动 1048

线程通讯,多线程

多线程ANR:application not responding应用无响应,主要原因主线程(UI)产生阻塞Thread+HandlerThread处理一些复杂的业务逻辑(耗时的事情) Handler在主线程中接收消息的一个对象 mHandler.sendMessage(msg); 发送一个消息对象 mHandler.sendEmptyMessage(what) 发送空消息,只有what没有obj

gswdzh的博客 397

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 332

Android中文API(126) —— Message

前言   本章内容是android.os.Message,版本为Android 3.1 r1,翻译来自"strongxu",欢迎访问他的微薄"http://t.qq.com/strongxu",再次感谢"strongxu"!欢迎你一起参与Android的中文翻译,联系我over140@gmail.com。   声明   欢迎转载,但请保留文章原始出处:)     博客园:http://ww...

weixin_33826609的博客 262

C#与欧姆龙PLC 通信——fins udp协议

该调试助手专门为了帮助大家学习以及测试Fins-Udp通信,下面进行详细介绍。

qq_34059233的博客 2874

handler的sendMessage、removeMessages、post、PostDelayed等

1、sendMessage      这个不必多说,稍微懂安卓的都会明白handler.sendMessage()是干嘛用的! 2、removeMesssages     首先普及:removeMessages会将handler对应message queue里的消息清空,如果带了int参数则是对应的消息清空。                        队列里面没有消息则handler会

p1522780457的博客 1764

STM32 HAL SDADC DMA

由于项目需要使用STM32F373单片机的SDADC功能对电位计进行检测,网上资料比较少,踩了很多坑,下面进行总结。

weixin_44597885的博客 1196

YOLOv8改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用

本文记录的是利用双级路由注意力机制优化的目标检测网络模型。传统的复杂度高,随着输入空间分辨率增加,计算量呈平方增长,导致严重的可扩展性问题。而本文所使用的在获取全局信息的同时,通过区域到区域路由和令牌到令牌注意力的合理设计,减少了不必要的计算量。BiFormer: Vision Transformer with Bi-Level Routing Attention采用四阶段金字塔结构,与一些先进的视觉Transformer类似。在每个阶段,首先使用重叠的补丁嵌入(在第一阶段)或补丁合并模块(在第二到第四阶段

Limiiiing的博客 614

android handler发送消息需要注意的地方

<br />最近写的一个程序在进入和退出的时候总是莫名其妙的死机,跟了以下总算找到了出错的地方。程序在后台获取网络数据,同时更新主线程显示,<br /> <br />另起的线程根据handler发送数据给主线程<br />/*send city name*/<br /> Message msg = new Message();<br /> msg.what = MSG_ID_LOCATE;<br /> msg.obj = cityname;<br /> handler.sendMessage(msg

abc的专栏 1万+

Qt Creator配置MSVC编译环境、调试环境

获取和安装:cdb.exe 在 Debugging tools for Windows 中,而现在已经不单独提供下载,只在Windows SDK 或者Windows Driver Kit里面包含 所以需要下载微软的调试工具,最少需要下载 Windows SDK。在windows上开发,一般使用Qt Creator自带mingw编译器,编译和调试都很方便,安装Qt时勾选后,自动配置完毕。但是有时候我们需要使用MSVC的编译器,这个时候我们没法直接使用,需要配置环境才能使用,以下是配置方案。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6986

【Android错误】Handler.SendMessage()

Android错误——Handler.SendMessage() 错误 :Cannot resolve method 'sendMessage(android.os.Message) private void sendMsg(int what,Object object){ Message msg=new Message(); msg.what=what; ...

Alvin的博客 2826

计算机控制技术及应用

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Android 开发】: Android 消息处理机制之三: Handler 中 sendMessage() 源代码剖析

在前面的两件中我们学习了Handler和Message的基本使用方法[Android消息处理机制之Handler与Message],还有Message中obtain()的几种重载方法的使用方式的不同[Android消息处理机制 Message中 btain()源代码剖析],这一讲我们来学习一下Handler中的sendMessage()的几种重载方法的使用方式的不同以及它们的源代码的剖析

AHuier_Techblog :如果我不在写代码,你就 @me 4万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android中Handler的post和sendMessage的区别

1.post和sendMessage功能其实差不多,post其实也是通过sendMessage来实现的,都是发送消息到Handler所在的线程的消息队列中 2.post的用法更方便,经常会post一个Runnable,处理的代码直接写在Runnable的run方法中,其实就是将这个Runnable发送到Handler所在线程(一般是主线程)的消息队列中。sendMessage方法主线程处理方法一...

Mr__dingding的博客 1903

VC中sqlite的使用

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

Android之Handler的post方法和sendMessage的区别

Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务:通过 post 方法和通过 sendMessage 方法。

追梦的鱼儿 936

Android Handler消息机制:sendMessage与obtainMessage性能对比

在Android多线程编程中,消息机制是实现线程间通信的核心技术。Handler作为消息系统的枢纽,通过MessageQueue和Looper实现跨线程任务调度。从实现原理看,消息池复用机制能显著降低GC频率,而正确的API选择直接影响内存效率和线程安全。sendMessage()与obtainMessage()+sendToTarget()两套方案在对象复用、调用栈深度和空指针防护等方面存在差异,特别是在高频消息场景(如UI刷新)下,handler.obtainMessage()展现出更优的内存管理特性。

weixin_34408624的博客 434

萝卜小姐-Handler之系列sendMessage学习

sendMessage方式学习sendMessage作用sendMessage系列方法源码分析sendMessage(Message)sendMessage和post区别二级目录三级目录 sendMessage作用 sendMessage系列方法源码分析 sendMessage(Message) /** 在当前时间之前的所有挂起消息之后,将消息推送到消息队列的末尾。它将在{@link#handleMessage}中,在附加到此处理程序的线程中接收。 *如果消息已成功放入消息队列,@return返回tr

baidu_28070317的博客 1842

android sendmessage传递对象,android handler sendMessage

我们先从最熟悉也是最基本的方法sendMessage(Message msg)来查看,为什么说它是最基本的方法,因为其他发送方法无论是post开头的各种方法还是sendEmptyMessage()本质上都是内部帮我们创建了Message对象,再调用sendMessage(Message msg)来执行的。当然说它是最基本的方法也不完全正确,因为它实际上是调用了delayMillis为0时的send...

weixin_30125497的博客 1315

安卓的Handler机制

Android Handler机制解析 Handler机制是Android实现线程间通信的核心框架,主要由四个关键组件构成: Handler:消息发送和处理的桥梁,负责发送消息(sendMessage)和处理消息(handleMessage) Message:消息数据结构,包含what、obj、arg1/arg2等字段 MessageQueue:消息队列,负责消息的存储和管理 Looper:消息循环,从队列中取出消息并分发 每个线程只能拥有一个Looper,通过ThreadLocal保证线程隔离。使用Han

weixin_44078411的博客 1170

子线程Handler.sendMessage 报错:Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage

03-17 08:10:18.760 16029-16029/tech.androidstudio.tulingdemo E/AndroidRuntime: FATAL EXCEPTION: main 03-17 08:10:18.760 16029-16029/tech.androidstudio.tulingdemo E/AndroidRuntime: Process: tech.andro

Kodulf的专栏 2万+

Android :安卓学习笔记之 Handler机制 的简单理解和使用

Android Handler机制的简单理解和使用1、Handler使用引出2、背景和定义3、作用4、相关概念5、工作流程5.1、对应关系6、基本使用7、参考 1、Handler使用引出 现在作为客户,有这样一个需求,当打开Activity界面时,开始倒计时,倒计时结束后跳转新的界面(思维活跃的朋友可能立马想到如果打开后自动倒计时,就类似于各个APP的欢迎闪屏页面),如下图: 可能觉得直接开启一个包含倒序循环的子线程就ok了,具体实现如下: activity_main <?xml version="

JMW1407的博客 6775

【Android】Handler用法及原理解析

Handler是用于在不同线程之间进行消息传递的机制。它与Looper和一起工作,帮助在不同线程间传递和处理消息,特别是在主线程与子线程之间进行通信。

Patrick_yuxuan的博客 4061
上一篇: vs的test很好用
下一篇: Android Studio中切换测试多个Activity
xwpcom
博客等级 码龄24年 16粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值