android– 未使用subscribe的结果

android– 未使用subscribe的结果,第1张

概述我今天已升级到AndroidStudio3.1,这似乎增加了一些lint检查.其中一个lint检查是针对未存储在变量中的一次性RxJava2subscribe()调用.例如,从我的Room数据库中获取所有玩家的列表:Single.just(db).subscribeOn(Schedulers.io()).subscribe(db->db.p

我今天已升级到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

这样的一次性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()).
总结

以上是内存溢出为你收集整理的android – 未使用subscribe的结果全部内容,希望文章能够帮你解决android – 未使用subscribe的结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1100696.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存