在RxJava中处理Completable,Single,Maybe和终止Observable的最佳实践

Hol*_*osa 20 android dispose rx-java rx-java2

我从Android的角度来问这个问题,但这应该适用于RxJava.

作为最佳实践,应我的观点始终处分甚至短暂的Completable,Single,Maybe和终止Observable的Rx类型应该在短期内结束,但是当用户关闭该视图可以仍在执行?我知道当Rx链终止时,它会被丢弃,但这可能会在视图关闭后的某个时候发生.

例如,Single正在执行HTTP GET.调用将完成,但可能是在视图被破坏后,暂时阻止垃圾回收.

如果a CompositeDisposable用于Disposable长期观察收集这些s,我会认为应该注意clear()或Disposable定期删除这些s以防止无限大小的增长CompositeDisposable?

Jon*_*Jon 11

作为一种最佳实践,我的视图应该始终处理即使是短暂的Completable,Single,Maybe和终止Observable Rx类型

如果您与其他人共享代码,作为最佳实践,我会说是的,您应该处理.虽然它可能看起来像是额外的锅炉板,但它会阻止下一个开发人员尝试挂钩您的订阅代码并尝试访问可能不再存在的组件(即Context在Fragment分离后等等).

如果使用CompositeDisposable以长期视图收集此类Disposables,我认为应该注意清除()或以其他方式定期删除这些Disposables以防止CompositeDisposable的大小无限增长?

我想指出在rxjava2中,CompositeDisposables有一个状态; 一旦你打电话dispose(),任何后续Disposable添加的将立即被处理掉.所以作为最佳实践:

  1. CompositeDisposable在生命周期的开始(onCreate(...)等)创建一个新鲜的
  2. 照顾dispose()的onDestroy(...),因为到那个时候你的回调几乎没有价值,只是抓着资源.


Ben*_*min 5

CompositeDisposable处理onPause或onDestroy避免此类问题是一个很好的做法。