GCX-HCI / ThirtyInch

a MVP library for Android favoring a stateful Presenter
Apache License 2.0
1.03k stars 101 forks source link

"Don't add observers when the presenter reached the DESTROYED state" EXCEPTION #154

Closed stevendevit closed 6 years ago

stevendevit commented 6 years ago

The app crashes when applying Instant Changes

 Unable to start activity ComponentInfo{com.tankadev.stream_cast_for_twitch/stevendevit.com.appmvp.MainActivity}: java.lang.IllegalStateException: Don't add observers when the presenter reached the DESTROYED state. They wont get any new events anyways.
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
                      at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4919)
                      at android.app.ActivityThread.-wrap19(Unknown Source:0)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1702)
                      at android.os.Handler.dispatchMessage(Handler.java:105)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6938)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
                   Caused by: java.lang.IllegalStateException: Don't add observers when the presenter reached the DESTROYED state. They wont get any new events anyways.
                      at net.grandcentrix.thirtyinch.TiPresenter.addLifecycleObserver(TiPresenter.java:131)
                      at net.grandcentrix.thirtyinch.internal.TiFragmentDelegate.onCreate_afterSuper(TiFragmentDelegate.java:187)
                      at net.grandcentrix.thirtyinch.TiFragment.onCreate(TiFragment.java:125)
                      at stevendevit.com.appmvp.base.fragmentation.BaseSupportFragment.onCreate(BaseSupportFragment.java:77)
                      at android.support.v4.app.Fragment.performCreate(Fragment.java:2331)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1386)
                      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
                      at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3244)
                      at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3194)
                      at android.support.v4.app.FragmentController.dispatchCreate(FragmentController.java:184)
                      at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:355)
                      at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
                      at net.grandcentrix.thirtyinch.TiActivity.onCreate(TiActivity.java:103)
                      at stevendevit.com.appmvp.base.fragmentation.BaseSupportActivity.onCreate(BaseSupportActivity.java:52)
                      at android.app.Activity.performCreate(Activity.java:7174)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
                      at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4919) 
                      at android.app.ActivityThread.-wrap19(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1702) 
                      at android.os.Handler.dispatchMessage(Handler.java:105) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6938) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
passsy commented 6 years ago

Seems like you are reusing a TiPresenter when your Fragment got recreated. Have you removed the Fragment from the FragmentManager and added it again?

Make sure providePresenter always returns a new TiPresenter instance. It automatically handles when a new instance is required and most of the time reuses the previously created one.