EventBus3.0 总结

使用eventbus有一段时间了,一直没有总结一下,最近工作有点空闲,决定抽空好好总结一下。

1.EventBus3.0和之前版本的区别

1.注册方法的区别

一般在activity的oncreat()中注册:

EventBus.getDefault().register(this);

然后在activity的onDestory()中解除注册:

EventBus.getDefault().unregister(this);

这个方法和之前得版本一样,但是,在3.0中,不再有registerSticky()方法

同时,3.0的register方法没有任何重载,不在通过某个特定的名称来接收某个特定的类

例如,在3.0之前可以这么register

EventBus.getDefault().register(this,"getSomeEvent",SomenEvent.class);

但是在3.0之后这些方法通通都被摒弃了,只有一个注册方法。

2.发送,接收Event的区别

与之前版本一样,3.0发送Event的方法没有发生改变,同样是通过:

EventBus.getDefault().post(new SomeEvent());
EventBus.getDefault().postSticky(new SomeEvent()); 来发送不同类型的event。

但是,在接收的方法上,3.0有很大的区别。

3.0是通过注解来接收不同的event事件,同时,在接收事件的方法上,不再需要使用onEvent作为方法名.

例如,一个接收event的方法可以这么写:

    @Subscribe()
    public void getSomeEvent(SomeEvent event) {                         `  
                  //do something
     }

一个作为接收event的方法,必须使用@Subscribe注解

同时,@Subscribe有三个参数,来配置接收方法
第一个参数: threadMode

     threadMode,有4个值:   
     ThreadMode.POSTING  //发布事件所在线程,默认参数
     ThreadMode.MAIN     //androidUI线程
     ThreadMode.BACKGROUND  //后台线程
     ThreadMode.ASYNC       //后台线程
  ThreadMode.BACKGROUND 和 ThreadMode.ASYNC 都是在后台线程执行的,但有所区别。

  使用ThreadMode.BACKGROUND 的话,如果发布线程是在主线程,那么接收线程会切换到后台线程。
  如果不是在主线程的话,会在同一个线程处理。

  使用ThreadMode.ASYNC的话,接收线程会强制切换成后台线程,并且和发送线程与主线程总是不在同一个线程上。

第二个参数 : sticky

    sticky
    true   
    false  //默认参数

    sticky用来接收一个最近的标志位sticky的事件,在发送事件的时候,需要使用

    EventBus.getDefault().postSticky(new SomeEvent());

   这里有一个小技巧,一个activityA给另一个activityB发送事件,如果B是第一次启动,那么使用post是收不到A发送的event的,这种情况下可以使用postSticky来发送。
   同时,由于使用sticky的话event会一直保存最后一个,如果想解除保存的话,可以使用:
   EventBus.getDefault().removeStickyEvent(Evn.class);

第三个参数:priority

    priority  //默认值0
    priority 用来标志接收方法的优先级,如果多个方法对同一个event进行处理,需要按不同的顺序来处理的话,可以使用这个参数,值越大,优先级越大,越先处理事件

2.EventBus3.0使用实例

综上所述,那么一个完整的EventBus分发事件那么会经过以下步骤

    接收类:   注册-->注解接收方法->取消注册
       对应方法:
          register()-> @Subscribe注解的方法->unregister()
   分发事件类:  注册——>发送事件->取消注册
       对应方法:
          register()-> post()/postSticky()->unregister() 

以上,另外写了一个demo,方便大家更好的理解,点击下载
另,有兴趣的可以关注下,开始会每周不定期更新博客,基本上都是一些自己的经验,心得。
所有demo都会上传到github.

你可能感兴趣的:(总结,android开发)