最近在公司的项目中集成微信支付,在WXPayEntryActivity的onResp的回调中使用了EventBus的粘性事件通知支付页面,从支付页面拿到某个值之后再进入等待页面,测试的时候只测了一次,支付成功没有问题,跳转也没有问题。然而,在第二次支付的时候,发现未经过支付页面,直接进入了等待页面,当然,要传递的值没带过来,但是WXPayEntryActivity的onResp的回调中返回的code是0,也就是支付成功了,这就很奇怪了,试了很多次都是这样。后来把进程杀掉,重新进来又可以支付了,想了好久,后来怀疑是不是EventBus的问题,于是就去查了一下粘性事件和普通事件的区别。
sticky事件一般用在我们不确认订阅关系是否存在,但是想提前发送广播的时候。针对sticky事件 eventBus会缓存在事件发射队列,若是订阅关系已经存在则发射出去,但不会销毁。下次再次订阅,会继续接收上一次事件。问题就出在这里,再次支付时,接收了上次的粘性事件,直接默认支付成功,跳到等待页面。
解决办法:
EventBus.getDefault().removeStickyEvent(event);或者使用非sticky事件。