Android开发-EventBus使用详解

EventBus使用详解

最近项目做得接近尾声,终于有时间更新一下我的文章了,好的,废话不多说 上菜~

我们大家在使用EventBus的时候,需要了解他的逻辑原理,不必了解它的源码,那么高深。所以我就在这里不讲源码了!
首先EventBus是一个订阅者模式,也就是像我们关注一个微信公众号一样,公众号是发消息者,我们关注该公众号的人就是订阅的人,也就是收消息的。公众号只要一有新的消息推送,我们的微信就会弹出一条公众号所发的消息,这就像EventBus逻辑一样。

首先我们使用EventBus时需要注册,具体在什么时间注册,根据自己的需要去注册,如果不注册,EventBus就无法正常发送消息,
接收者也就无法接收到发送的消息,我的项目是用EventBus传值,所以我就写在Base类中了,不过你们写demo的话可以写在onCreate中。
EventBus注册

EventBus.getDefault().register(this);

EventBus取消注册(一般我们写在onDestroy中,或者onStop中,不过我都是写在onDestroy中)

EventBus.getDefault().unregister(this);

正常使用发送消息,我这里的HomeFragmentRequest 就是一个Bean类,我们可以定义普通类型数据,只不过发送什么类型,我们就要用什么类型去接收

                HomeFragmentRequest homeFragmentRequest = new HomeFragmentRequest();
                homeFragmentRequest.fragmentName = "VipGetCoffeeFragment";
                EventBus.getDefault().post(homeFragmentRequest);//Eventbus发送消息

正常接收消息,也就是接收发送过来的消息(方法名自定义,一定要用发送过来的数据类型#必须带上注解#)

    @Subscribe
    public void shiftFragment(HomeFragmentRequest request) {
              String name = request.fragmentName;
              Log.i(TAG,"shiftFragment :"+name);
    }

说完了普通使用方法,下面就开始我们的粘性事件的使用方法

粘性事件其实和普通的区别不大,只不过,我们在遇到还没有创建的页面,就需要传递过来数据的场景,上菜!~

粘性事件的发送方式

                HomeFragmentRequest homeFragmentRequest = new HomeFragmentRequest();
                homeFragmentRequest.fragmentName = "VipGetCoffeeFragment";
                EventBus.getDefault().postSticky(qRjudge);//发送粘性事件消息

有人猜到了,接受和普通接受一样只不过在注解的后面加了点作料,这样我们就能在创建前保存,创建之后使用传递过来的数据啦

  @Subscribe(sticky = true)
    public void shiftFragment(HomeFragmentRequest request) {
              String name = request.fragmentName;
              Log.i(TAG,"shiftFragment :"+name);
    }

不过还是要交代几句话,EventBus可以多个订阅,多个订阅会在发送数据后同时接收到数据,并且执行接收方法的逻辑,但是一个接收方法是不可以接收多个数据类型的,如果有需要的话,那只能把两个Bean或者你需要传什么样的参数,定义在一个Bean类中,这样减少bean类的创建。OK交代完了,有什么不懂的,要留言或者私信我哦!

你可能感兴趣的:(Android开发-EventBus使用详解)