gpt4 book ai didi

android - subscribe 的结果没有被使用

转载 作者:IT老高 更新时间:2023-10-28 13:02:45 25 4
gpt4 key购买 nike

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

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

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

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 调用的最佳做法是什么?我应该保持完整的 Disposabledispose() 吗?还是我应该@SuppressLint 继续前进?

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

最佳答案

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

管理大量 Disposable 的便捷方法是使用 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()).

关于android - subscribe 的结果没有被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49522619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com