我在我的项目中使用了 RxJava2 和 Retrolambda,有一段时间我感觉很好,将回调包装到 flowables 中,但是有一天我遇到了这个错误,如果我尝试在这个非常简化的代码片段上运行 proguard:
private Flowable<Object> getTestFlowable() {
return Flowable.create(emitter -> new Thread(new Runnable() {
@Override
public void run() {
emitter.onNext("one");
emitter.onComplete();
}
}).run(), BackpressureStrategy.BUFFER);
}
然后我会收到这个警告,它使我的构建失败:警告:com.yandex.testfield.MainActivity$1:在程序类 com.yandex 中找不到封闭方法 'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'。 testfield.MainActivity
目前,我看到这个问题的两个临时解决方案:
不要使用 lambda 并改用匿名类
private Flowable<Object> getTestFlowable() { return Flowable.create(new FlowableOnSubscribe<Object>() { @Override public void subscribe(FlowableEmitter<Object> emitter) throws Exception { new Thread(new Runnable() { @Override public void run() { emitter.onNext("one"); emitter.onComplete(); } }).run(); } }, BackpressureStrategy.BUFFER); }
- 在包含上面列出的方法的类上禁用 proguard
但我仍然想知道为什么会这样?这是 RxJava2\Retrolambda\Proguard 中的错误吗?