Open edwardZj opened 2 years ago
一直想抽空给你提交个pull request,想想还是提个建议好了,哈哈哈 就是对于多事件监听,写法比较不够优雅,如下(因为项目中大量的使用事件分发来解耦,所以在一些地方要监听多个事件的场景很多) LiveEventBus .get("some_key1", String.class) .observe(this, new Observer() { @Override public void onChanged(@Nullable String s) { } }); LiveEventBus .get("some_key2", String.class) .observe(this, new Observer() { @Override public void onChanged(@Nullable String s) { } }); .............. 我对LiveEventBus做了一些二次封装,包括之前的try catch事件,延迟发送等等,对于多事件监听,我是用注解来解决这个问题的,我的写法如下: DanmuPoster.observe((LifecycleOwner) getContext(), new EventObserver() { @EventObserve({OperationCode.FANS_CARD_JOIN, OperationCode.RECEIVE_GIFT, OperationCode.FANS_CARD_UPGRADE}) @Override public void onReceive(String op, Object obj) { switch (op) { case OperationCode.RECEIVE_GIFT: xxxxxxxx break; case OperationCode.FANS_CARD_JOIN: xxxxxxxx break; case OperationCode.FANS_CARD_UPGRADE: xxxxxxxx break; default: break; }
} });
DanmuPoster是我基于LiveEventBus封装的,observe方法里面,基于反射读取了EventObserver的onReceive方法的注解,然后分别建立observer监听(当然这种方式肯定只能基于object接收),observeSticky等同理 Method method = observe.getClass().getDeclaredMethod("onReceive", String.class, Object.class); EventObserve anno = method.getAnnotation(EventObserve.class); if (anno != null) { String[] value = anno.value(); for (String eventName : value) { observe(owner, eventName, observe); } } 这样监听事件的代码都能集合到一块,看起来清晰一些紧凑一些,发送的代码不变.当然,我懒了点,最好还是用注解处理器在编译期处理分别建立observer监听 我还有另外的建议放到别的issue里
其实也不用非得注解,也可以用参数来传, observe的时候传一个String数组,或者 new EventObserver() { // public String[] getEvents(){ return new String[]{event1,event2,event3}; } }
写得挺好,容我消化消化:)
一直想抽空给你提交个pull request,想想还是提个建议好了,哈哈哈 就是对于多事件监听,写法比较不够优雅,如下(因为项目中大量的使用事件分发来解耦,所以在一些地方要监听多个事件的场景很多) LiveEventBus .get("some_key1", String.class) .observe(this, new Observer() {
@Override
public void onChanged(@Nullable String s) {
}
});
LiveEventBus
.get("some_key2", String.class)
.observe(this, new Observer() {
@Override
public void onChanged(@Nullable String s) {
}
});
..............
我对LiveEventBus做了一些二次封装,包括之前的try catch事件,延迟发送等等,对于多事件监听,我是用注解来解决这个问题的,我的写法如下:
DanmuPoster.observe((LifecycleOwner) getContext(), new EventObserver() {
@EventObserve({OperationCode.FANS_CARD_JOIN, OperationCode.RECEIVE_GIFT, OperationCode.FANS_CARD_UPGRADE})
@Override
public void onReceive(String op, Object obj) {
switch (op) {
case OperationCode.RECEIVE_GIFT:
xxxxxxxx
break;
case OperationCode.FANS_CARD_JOIN:
xxxxxxxx
break;
case OperationCode.FANS_CARD_UPGRADE:
xxxxxxxx
break;
default:
break;
}
DanmuPoster是我基于LiveEventBus封装的,observe方法里面,基于反射读取了EventObserver的onReceive方法的注解,然后分别建立observer监听(当然这种方式肯定只能基于object接收),observeSticky等同理 Method method = observe.getClass().getDeclaredMethod("onReceive", String.class, Object.class); EventObserve anno = method.getAnnotation(EventObserve.class); if (anno != null) { String[] value = anno.value(); for (String eventName : value) { observe(owner, eventName, observe); } } 这样监听事件的代码都能集合到一块,看起来清晰一些紧凑一些,发送的代码不变.当然,我懒了点,最好还是用注解处理器在编译期处理分别建立observer监听 我还有另外的建议放到别的issue里