EventBus不用多说了,做Android开发的都知道。
在我刚入行的时候,我是这样使用的
注册
EventBus.getDefault().register(this);
这样注册没什么毛病,只不过如果我们一不小心在一个类中注册了两遍的话,EventBusException了解一下😂
反注册
EventBus.getDefault().unregister(this);
额,反注册倒不会抛出任何异常
使用方式
1.post事件
EventBus.getDefault().post(new TestEvent());
2.接收事件
@Subscribe
public void onXXX(TestEvent testEvent){
}
下面我们看看这种写法的不足:
1.注册的时候一不小心会抛异常
2.不太容易统计我们在整个项目中一共使用了多少次EventBus,换句话说,不方便统一管理,不方便更换
3.每次发送一个不同类型的事件的时候,都需要创建一个新的event类
4.同一个event类的复用性不强,同一种event事件被多次接收的时候,无法进行区分
睡醒了,接着写
后来,终于有一天我忍不住了,把代码改成了现在的样子
1、写一个EventBusUtil类
public class EventBusUtil {
//注册方法
public void register(Object target){
if (EventBus.getDefault().isRegistered(target)) {
EventBus.getDefault().register(target);
}
}
//反注册方法
public void unRegister(Object target){
if (EventBus.getDefault().isRegistered(target)) {
EventBus.getDefault().unregister(target);
}
}
//post方法多次重载,每一种event事件都专门写一个post方法
//这样方便我们管理和统计某一种类型的event事件在项目中有多少使用的地方
//而新增一个post方法并不会浪费我们多少时间
public void post(TestEvent testEvent){
}
public void post(TestEvent2 testEvent2){
}
}
2、使用
//每一种Event都继承BaseEvent类
//BaseEvent类中声明一个eventId
@Subscribe
public void onXXX(TestEvent testEvent){
//通过eventId来判断同一种事件类型的不同业务
int eventId = testEvent.getEventId();
}
经过改造过后的代码的确方便了很多,这只是本人一些浅薄的用法总结,欢迎各路大神赐教。