
我今天已升级到Android Studio 3.1,这似乎增加了一些lint检查.其中一个lint检查是针对未存储在变量中的一次性RxJava2 subscribe()调用.例如,从我的Room数据库中获取所有玩家的列表:
Single.just(db) .subscribeOn(Schedulers.io()) .subscribe(db -> db.playerDao().getAll());导致一个大的黄色块和这个工具提示:
The result of
subscribeis 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的结果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)