关联EventBus
、RxBus
、androidStudio
、Android
异常
Subscriber class xxx and its super classes have no public methods with the @Subscribe annotation
分析
从源码上看,是因为没有注解,反射得到为空。
我的代码里是这样写的:一个注册,一个反注册,发现报错,然后一些blog博主说是啥?R8
压缩问题
之后我开始进行修改,有以下两种方案:
方案一
关闭R8
压缩
minifyEnabled false
但是这样会使得你的应用增大不少,比如你使用了某个第三方库时,应用中只使用了其中很小一部分,但打包时所有库代码都会保留在应用中。
方案二
添加相应的压缩/混淆
规则,比如EventBus
:
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# And if you use AsyncExecutor:
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
两种方案我都进行修改了,发现还是不行,之后感觉出来可能是没有
@Subscribe
注解的原因,所以我进行了如下修改,添加了注解,测试过后发现还是不行,又在里面加了事件,才好使
如下,改到这里,程序才好使,没有报那个错误
总结
RxBus
要想使用,每个注册的地方都得搭配一个监听的接受者
,还必须要带上接收的事件
才行。我在别的地方有监听的接收者还不行,当然 ,这个接收者的事件 可以是别的事件,但是必须要有接收者。真坑啊。。。必须要搭配使用,男女搭配,干活不累。