EventBus使用技巧与心得

在很久之前,我就听说过事件总线很好用(EventBus),但是我一直没真正在项目中用上它,直到有一天我接手了女朋友的商城项目过来维护的时候,我发现她在开发的时候把事件总线集成上去了,用起来真特么的爽,异步完成后直接发个事件出来,接收到事件后又可以继续进行下一步操作,我个人感觉它能替换基本的广播、接口回调和Handler的一个东西,但是唯一感觉不好的就是:如果事件定义的不好,很容易导致代码混乱。接下来废话不多说,直接上教程。(由于接触不久,所以只介绍我常用到的技术,感觉很有feel,大神想研究更深入的,请忽略本文)

AndroidStudio教程步骤:
  • 在buil.gradle中引入 compile 'org.greenrobot:eventbus:3.0.0' 即可;

  • 定义事件,也就是定义一个实体类而已,为了代码规范,个人习惯以 EventBus 结尾,见名思意
    比如操作购物车的事件代码:

    public class OperShoppingCartEventBus {    public int oper;  //操作值    public int position;    public JSR_GetShopCarList.ContentBean.ListBean listBean;    public OperShoppingCartEventBus() {    }    /**     * @param oper     -1:(购物车数量-1),0:(将商品移除出购物车),1:(购物车商品数量+1、将商品添加到购物车)     * @param position  操作的下标     * @param listBean  商品实体类     */    public OperShoppingCartEventBus(int oper, int position, JSR_GetShopCarList.ContentBean.ListBean listBean) {        this.oper = oper;        this.position = position;        this.listBean = listBean;    }}
    

就这样一个事件就定义好了,接下来就是要对这个事件进行操作了。

  • 在需要发送事件的界面中调用以下发送代码语句即可:
    EventBus.getDefault().post(new OperShoppingCartEventBus(1, position, getItem(position)));
    post 发送一个事件其实就是实例化一个刚刚定义好的事件而已。
  • 在需要接收事件的界面中要初始化EventBus 才可能接收到事件的通知,如下在Activity示例:
    1.在onCreate方法中 EventBusEventBus.getDefault().register(this); //注册事件
    2.定义一个事件方法,也就是能接收到事件,方法一定是要传入刚刚上面定义的事件,比如:
    @Subscribe(threadMode = ThreadMode.MAIN) public void onEventOper(OperShoppingCartEventBus mEventBus) { //在这里可以对根据事件来进行下一步操作 //比如:判断mEventBus.oper 的值来进行加减商品 }
    细心的人一定会注意到 @Subscribe(threadMode = ThreadMode.MAIN) 这句代码
    这个是用来指定线程模型,上面表示事件的处理会在UI线程中执行;
    除了上面讲的普通事件外,EventBus还支持发送黏性事件,就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似,有空的可以自己去深入研究一下事件总线,我感觉非常不错。
    3.在onDestroy方法反注册 EventBus.getDefault().unregister(this); //反注册EventBus
注意:一定要在onDestroy方法中反注册事件

你可能感兴趣的:(EventBus使用技巧与心得)