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);
}