其他分享
首页 > 其他分享> > android – 未使用subscribe的结果

android – 未使用subscribe的结果

作者:互联网

我今天已升级到Android Studio 3.1,这似乎增加了一些lint检查.其中一个lint检查是针对未存储在变量中的一次性RxJava2 subscribe()调用.例如,从我的Room数据库中获取所有玩家的列表:

Single.just(db)
            .subscribeOn(Schedulers.io())
            .subscribe(db -> db.playerDao().getAll());

导致一个大的黄色块和这个工具提示:

The result of subscribe is not used

Screenshot of Android Studio. Code is highlighted in Yellow with a tooltip. Tooltip text: The result of subscribe is not used.

这样的一次性Rx调用的最佳做法是什么?我是否应该持续使用Disposable并完成处理()?或者我应该只是@SuppressLint并继续前进?

这似乎只影响RxJava2(io.reactivex),RxJava(rx)没有这个lint.

解决方法:

IDE不知道您的订阅在未处理时可能产生的影响,因此它将其视为可能不安全.例如,您的Single可能包含网络调用,如果您的Activity在执行期间被放弃,则可能导致内存泄漏.

管理大量Disposables的便捷方法是使用CompositeDisposable;只需在封闭类中创建一个新的CompositeDisposable实例变量,然后将所有的Disposables添加到CompositeDisposable(使用RxKotlin,您只需将addTo(compositeDisposable)附加到所有的Disposables).最后,当您完成实例后,请调用compositeDisposable.dispose().

这将消除lint警告,并确保您的Disposables得到妥善管理.

在这种情况下,代码看起来像:

CompositeDisposable compositeDisposable = new CompositeDisposable();

Disposable disposable = Single.just(db)
        .subscribeOn(Schedulers.io())
        .subscribe(db -> db.get(1)));

compositeDisposable.add(disposable); //IDE is satisfied that the Disposable is being managed. 
disposable.addTo(compositeDisposable); //Alternatively, use this RxKotlin extension function.


compositeDisposable.dispose(); //Placed wherever we'd like to dispose our Disposables (i.e. in onDestroy()).

标签:rx-java2,android,android-studio,lint,android-studio-3-1
来源: https://codeday.me/bug/20190930/1834492.html