View在Activity-onResume重绘带来的问题以及解决方案

本文介绍了一个关于订单推送显示的Bug修复过程。当应用从后台切换到前台时,原本的订单列表显示不全。通过分析SwipeCardView组件的onLayout方法,发现是因为Activity的onResume触发了重绘问题。最终通过增加前台判断及调整推送逻辑解决了问题。

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

需求分析:

当客户端收到一个推送的时候,获取所有待确认的订单,并弹出一个框,框最多有3个数据,并且第二个跟第三个分别有着50%跟70%的透明度。如下图所示:
这里写图片描述

开发、编码:

在github上搜索了,找到了SwipeCardView这个控件,并且稍稍修改了源码,成功实现了需求。

Test阶段:
在test的时候却发现了一个bug。
当把App放至后台,目前浏览着别的程序,这时收到推送,并且弹出需求的框出来了,于是欣喜的打开App,却发现原本3个订单的,却剩下了第二个跟第三个,这下可就麻烦了。
倒腾了一番之后,才发现了原理,在SwipeCardView的onLayout中有这几行代码,当第一次执行onLayout的时候,定位第一个childView的位置并且把其加入view中,之后定位第二个、第三个……并且完成添加childView操作。
这里写图片描述

bug产生原因分析:
当App在后台执行的时候突然切回前台,Activity的onResume将被执行,从而,View将被重绘,onLayout也就重新被执行,因为源码判断逻辑的问题,此时被重新定位并且onDraw的只有第二个第三个,所以导致了第一个childView看不见的问题,实际上第一个childView是完全没被绘制。

解决方式:
1.增加一个判断方法:App是否运行在前台。
2.更改推送逻辑:在接收到推送的时候,不要立即弹出这个框,而是存入一个sp布尔值,这个值的意义是:是否有未完成的订单。
3.在Activity.onResume的时候,判断这个值,再弹出框。

这样就保证了在每次Activity在onResume的时候都才去弹出这个框子,成功解决了问题,on yeah!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值