The IDE does not know what potential effects your subscription can have when it's not disposed, so it treats it as potentially unsafe. For example, your Single
may contain a network call, which could cause a memory leak if your Activity
is abandoned during its execution.
A convenient way to manage a large amount of Disposable
s is to use a CompositeDisposable; just create a new CompositeDisposable
instance variable in your enclosing class, then add all your Disposables to the CompositeDisposable (with RxKotlin you can just append addTo(compositeDisposable)
to all of your Disposables). Finally, when you're done with your instance, call compositeDisposable.dispose()
.
This will get rid of the lint warnings, and ensure your Disposables
are managed properly.
In this case, the code would look like:
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()).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…