Android EventBus使用注意事项

在使用EventBus过程中,遇到一个bug:在页面输入金额10元,等待支付时点击取消,跳转回到页面重新输入金额20元,输入支付密码交易成功,在成功结果看到的交易金额居然是10元。在排除静态变量、系统缓存外,逐步把问题焦点指向了EventBus,经过一顿排查,终于锁定了问题所在。原来在取消逻辑分支中,没有解注册EventBus,真的是马虎啊!


EventBus虽然简单易用,但在使用过程中,也有一些地方值得我们注意的,综合各方经验,注意事项总结如下:


  1、注册一般写在onCreate或者onStart中,尽量不要写在onResume,可能出现多次注册,比如:EventBusException: Subscriber class already registered to event class

  2、取消注册一定写在onDestory,写在onStop可能会引发异常;
  3、建议注册前先判断一下是否已经注册,避免重复注册,并且注册尽量放在各变量初始化最后,以免造成空指针异常;

if (!EventBus.getDefault().isRegistered(this)) {
    EventBus.getDefault().register(this);
}

  4、3.0和之前版本不兼容,现在采用注解的方法来接收事件,四种注解方式分别为:

    1)  @Subscrible  对应之前的onEvent();
    2)  @Subscrible(threadMode = ThreadMode.ASYNC) 对应之前的onEventAsync();
    3)  @Subscrible(threadMode = ThreadMode.BACKGRAND) 对应之前的onEventBackground();
    4)  @Subscrible(threadMode = ThreadMode.MAIN) 对应之前的onEventMainThread();

  5、采用注解后方法名没有限制了,参数只有一个,和发送者post的参数对应配对,未声明threadMode的时候默认线程模式是ThreadMode.POSTING,只有在该模式下才可以取消线程,否则容易导致如下异常:org.greenrobot.eventbus.EventBusException: This method may only be called from inside event handling methods on the posting thread

  6、一个事件不支持重复注册,否则会报异常。

      7、register后,一定要记得检查可能导致页面退出的情况,并及时unregister。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值