Fatal Exception: java.util.concurrent.CancellationException
Closed this issue · 5 comments
Fatal Exception: java.util.concurrent.CancellationException
at io.reactivex.internal.operators.single.SingleTakeUntil$TakeUntilOtherSubscriber.onNext(SingleTakeUntil.java:150)
at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:133)
at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)
at io.reactivex.internal.operators.observable.ObservableElementAtSingle$ElementAtObserver.onNext(ObservableElementAtSingle.java:91)
at io.reactivex.internal.operators.observable.ObservableFilter$FilterObserver.onNext(ObservableFilter.java:52)
at io.reactivex.internal.operators.observable.ObservableOnErrorReturn$OnErrorReturnObserver.onNext(ObservableOnErrorReturn.java:66)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.drain(ObservableCombineLatest.java:242)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$LatestCoordinator.combine(ObservableCombineLatest.java:195)
at io.reactivex.internal.operators.observable.ObservableCombineLatest$CombinerObserver.onNext(ObservableCombineLatest.java:312)
at io.reactivex.internal.operators.observable.ObservableSkip$SkipObserver.onNext(ObservableSkip.java:53)
at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onNext(ObservableRefCount.java:169)
at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onNext(ObservablePublish.java:233)
at io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246)
at io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.test(BehaviorSubject.java:490)
at io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.emitNext(BehaviorSubject.java:485)
at io.reactivex.subjects.BehaviorSubject.onNext(BehaviorSubject.java:184)
at com.trello.rxlifecycle2.components.support.RxFragment.onPause(RxFragment.java:88)
at com.pockee.ui.profile.transaction.TransactionFragment.onPause(TransactionFragment.java:197)
at android.support.v4.app.Fragment.performPause(Fragment.java:2368)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1357)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.FragmentManagerImpl.dispatchPause(FragmentManager.java:2902)
at android.support.v4.app.FragmentController.dispatchPause(FragmentController.java:234)
at android.support.v4.app.FragmentActivity.onPause(FragmentActivity.java:448)
at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onPause(RxAppCompatActivity.java:81)
at com.pockee.ui.base.BaseActivity.onPause(BaseActivity.java:200)
at com.pockee.ui.base.BasePermissionsActivity.onPause(BasePermissionsActivity.java:93)
at android.app.Activity.performPause(Activity.java:6390)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1312)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3436)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3409)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3384)
at android.app.ActivityThread.access$1100(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5585)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
This is how RxLifecycle works for Single
and Completable
. Read more here: https://github.com/trello/RxLifecycle/tree/2.x#unsubscription
Im sorry but I don't get it, what do I need to do and add to avoid this exception ?
If you need to avoid the exception, don't use RxLifecycle (and instead manually call unsubscribe()
on the subscriber).
Thanks for your reply
Also, you may apply onErrorResumeNext
to check if the exception is of type CancellationException
(I guess an RxLifecycle custom exception would have been nicer) to recover from it, otherwise just rethrow.
onErrorResumeNext(error -> {
if (error instanceof CancellationException) return Single.never();
return Single.error(error);
});