安卓开发中遇到的问题---调用handler.sendMessage后程序退出,无调用栈

在调试Android项目时,作者发现应用在切换到自由车activity并使用VS发送模拟数据后崩溃。问题最终定位到当jsonArrayLeaderList为空时的一个length()调用。通过单步调试,作者意识到由于缺少break,导致0x01的数据在0x02处理时引发空指针异常,原因是多线程环境中的同步问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个break引发的血案

还是之前那个项目,有多个activity。

切到自由车activity以后,使用vs发模拟数据,结果就挂了

刚开始努力想抓日志,然后发现抓不到,这里面有个小收获,就是咋屏蔽特定关键词

^(?!.*(Accessing)).*$

这应该是个正则表达式,实在是懒得研究这东西,但是这个试过是好使的

-----最后实际是挂在下面这行代码,当jsonArrayLeaderList为空的时候,看来安卓studio也不是万能的,这个异常就抓不住,不知道为啥。也可能有打印但是我没找到,反正没出调用栈

Int LeaderCount=jsonArrayLeaderList.length();

 

然后开始单步调试,调着调着发现接收数据的部分,收着收着就挂了,基本上是挂在这个位置

 

还以为是sendMessage有问题,排查了半天,也没发现啥问题

然后又多调试了几次,发现有时候是走到下一行再挂,就很奇怪,突然想到这个activity是多线程的,可能是接收线程有问题

然后就在接收线程挂了个断点,跑着跑着发现0x01部分能顺利走完,然后就走到0x02部分挂了

又觉得是不是0x02部分没获取到数据,再看看数据也没啥问题,但0x02那里msg.obj就是空的

再仔细想想,是因为0x01发了数据,handler的0x01收到以后,没有break,拿着0x01的数据走到0x02,自然是错的,用空指针去访问成员函数,就挂了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值