2017-04-18 57 views
8

我想使用rxjava在后台运行一个方法。我不关心结果。RxJava2在后台运行void方法

void myHeavyMethod() { (...) } 

到目前为止,我唯一的解决方案是将返回类型修改为例如boolean

boolean myHeavyMethod() { (...) return true; } 

后来我跑:

Completable.defer(() -> Completable.fromCallable(this::myHeavyMethod)) 
     .subscribeOn(Schedulers.computation()) 
     .subscribe(
       () -> {}, 
       throwable -> Log.e(TAG, throwable.getMessage(), throwable) 
     ); 

有没有办法做到这一点保持void返回类型?

回答

17

fromAction()方法就是你要找的。

Completable.fromAction(this::myHeavyMethod) 
+0

我收到一条错误“此语言级别不支持方法引用” – RunLoop

+0

方法引用是Java 8功能。所以你可能使用Java 7,因此你必须自己实现'Action'接口。 – tynn