tonykolomeytsev / mpeiapp

MpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ
MIT License
41 stars 4 forks source link

[BUG] Падения приложения из-за неверной работы с lifecycle #138

Closed tonykolomeytsev closed 3 years ago

tonykolomeytsev commented 3 years ago

Прилетает на Firebase:

Fatal Exception: io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.ClassCastException: v6.g$b cannot be cast to h6.i$b
       at io.reactivex.rxjava3.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:2)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:3)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:110)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:35)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:7)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:60)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:11)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnLifecycle.subscribeActual(ObservableDoOnLifecycle.java:13)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:19)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableRetryPredicate$RepeatObserver.subscribeNext(ObservableRetryPredicate.java:18)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableRetryPredicate.subscribeActual(ObservableRetryPredicate.java:24)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn.subscribeActual(ObservableObserveOn.java:31)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:22)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:4)
       at vivid.money.elmslie.android.screen.ElmScreen.observeEffects(ElmScreen.java:4)
       at vivid.money.elmslie.android.screen.ElmScreen$lifecycleObserver$1.onResume(ElmScreen.java:4)
       at java.lang.reflect.Method.invoke(Method.java)
       at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:1)
       at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:1)
       at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:1)
       at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:1)
       at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:14)
       at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:27)
       at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:19)
       at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:9)
       at androidx.fragment.app.Fragment.performResume(Fragment.java:4)
       at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:4)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:2)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
       at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:7)
       at androidx.fragment.app.Fragment.performResume(Fragment.java:7)
       at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:7)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:2)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
       at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:4)
       at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:4)
       at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:4)
       at kekmech.ru.mpeiapp.MainActivity.getNavigationHolder(MainActivity.java)
       at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:3)
       at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java)
       at android.app.Activity.performResume(Activity.java:8278)
       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4535)
       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4577)
       at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2142)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:7864)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

А также:

Caused by java.lang.ClassCastException: v6.g$b cannot be cast to h6.i$b
       at io.reactivex.rxjava3.internal.util.NotificationLite.getError(NotificationLite.java:1)
       at io.reactivex.rxjava3.subjects.ReplaySubject$UnboundedReplayBuffer.replay(ReplaySubject.java:1)
       at io.reactivex.rxjava3.subjects.ReplaySubject.subscribeActual(ReplaySubject.java:2)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:3)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:110)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:35)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:7)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:60)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:11)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnLifecycle.subscribeActual(ObservableDoOnLifecycle.java:13)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:19)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableRetryPredicate$RepeatObserver.subscribeNext(ObservableRetryPredicate.java:18)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableRetryPredicate.subscribeActual(ObservableRetryPredicate.java:24)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn.subscribeActual(ObservableObserveOn.java:31)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:5)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:22)
       at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:4)
       at vivid.money.elmslie.android.screen.ElmScreen.observeEffects(ElmScreen.java:4)
       at vivid.money.elmslie.android.screen.ElmScreen$lifecycleObserver$1.onResume(ElmScreen.java:4)
       at java.lang.reflect.Method.invoke(Method.java)
       at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:1)
       at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:1)
       at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:1)
       at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:1)
       at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:14)
       at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:27)
       at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:19)
       at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:9)
       at androidx.fragment.app.Fragment.performResume(Fragment.java:4)
       at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:4)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:2)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
       at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:7)
       at androidx.fragment.app.Fragment.performResume(Fragment.java:7)
       at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:7)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:2)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
       at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:4)
       at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:4)
       at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:4)
       at kekmech.ru.mpeiapp.MainActivity.getNavigationHolder(MainActivity.java)
       at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:3)
       at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java)
       at android.app.Activity.performResume(Activity.java:8278)
       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4535)
       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4577)
       at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2142)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:7864)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

К сожалению я потерял proguard names mapping файл, придется искать его или ловить багу уже на следующей версии приложения. Либо разбираться что такого происходит в getNavigationHolder(). Чинить надо, падений стало очень много. Больше 30 падений с момента релиза 1.8.0 (всего два дня прошло)

tonykolomeytsev commented 3 years ago

Про мапинг-файлы: https://stackoverflow.com/questions/49494799/proguard-specify-name-of-obfuscated-class

tonykolomeytsev commented 3 years ago

Корявое расширение viewBinding скорее всего виновато.