Search code examples
androidreact-nativeandroidx

Unable to instantiate fragment com.swmansion.rnscreens.Screen


I have been developing an app for android and ios using React Native 0.60.4, and just recently I discovered that putting the app in split-screen or freeform mode (from being the only app on the screen) sometimes causes it to crash.

I played with this further and found that I can launch the app into split screen or freeform mode with no problem, but sometimes resizing it will cause it to crash. Below is the output from my debugger instance in Android Studio, which I'm struggling to make sense of:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myApp, PID: 32150
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myApp/com.myApp.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.Screen$ScreenFragment: calling Fragment constructor caused an exception
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5279)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5187)
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.Screen$ScreenFragment: calling Fragment constructor caused an exception
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:465)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:50)
        at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:80)
        at androidx.fragment.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:3109)
        at androidx.fragment.app.FragmentController.restoreAllState(FragmentController.java:158)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:344)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85)
        at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:51)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5279) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5187) 
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:443)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:50) 
        at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:80) 
        at androidx.fragment.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:3109) 
        at androidx.fragment.app.FragmentController.restoreAllState(FragmentController.java:158) 
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:344) 
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85) 
        at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:51) 
        at android.app.Activity.performCreate(Activity.java:7802) 
        at android.app.Activity.performCreate(Activity.java:7791) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5279) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5187) 
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: java.lang.IllegalStateException: Screen fragments should never be restored
        at com.swmansion.rnscreens.Screen$ScreenFragment.<init>(Screen.java:24)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:443) 
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:50) 
        at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:80) 
        at androidx.fragment.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:3109) 
        at androidx.fragment.app.FragmentController.restoreAllState(FragmentController.java:158) 
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:344) 
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85) 
        at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:51) 
        at android.app.Activity.performCreate(Activity.java:7802) 
        at android.app.Activity.performCreate(Activity.java:7791) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5279) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5187) 
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

Solution

  • Add this to your MainActivity.java

    import android.os.Bundle;
    
    @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(null);
       }