需求分析:
当客户端收到一个推送的时候,获取所有待确认的订单,并弹出一个框,框最多有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!!!