【发布时间】:2017-05-12 10:04:05
【问题描述】:
我在我的项目中使用了 RxJava2 和 Retrolambda,有一段时间我感觉很好,将回调包装到 flowables 中,但是有一天我遇到了这个错误,如果我尝试在这个非常简化的代码 sn-p 上运行 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.testfield.MainActivity 中找不到封闭方法 'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'
目前,我看到了两个解决此问题的临时解决方案:
-
不要使用 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 中的错误吗?
【问题讨论】:
标签: java android proguard rx-java2 retrolambda