Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android Crashes on 3.8.0 #1176

Closed
1 of 2 tasks
scottmas opened this issue Oct 13, 2021 · 4 comments
Closed
1 of 2 tasks

Android Crashes on 3.8.0 #1176

scottmas opened this issue Oct 13, 2021 · 4 comments

Comments

@scottmas
Copy link
Contributor

scottmas commented Oct 13, 2021

Description

We're getting lots of reports of our Android users crashing since we updated from 3.4.0 to 3.8.0. We can't recreate it locally however. The stack traces we get though on our logging service are the following:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.olliesports.ollieapp/com.olliesports.ollieapp.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenFragment: calling Fragment constructor caused an exception
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3431)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7664)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenFragment: calling Fragment constructor caused an exception
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:566)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2454)
       at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
       at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
       at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:44)
       at com.olliesports.ollieapp.MainActivity.onCreate(MainActivity.java:27)
       at android.app.Activity.performCreate(Activity.java:7994)
       at android.app.Activity.performCreate(Activity.java:7978)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7664)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2454)
       at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
       at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
       at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:44)
       at com.olliesports.ollieapp.MainActivity.onCreate(MainActivity.java:27)
       at android.app.Activity.performCreate(Activity.java:7994)
       at android.app.Activity.performCreate(Activity.java:7978)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7664)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by java.lang.IllegalStateException: Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity.
       at com.swmansion.rnscreens.ScreenFragment.<init>(ScreenFragment.kt:41)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
       at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2454)
       at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
       at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
       at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:44)
       at com.olliesports.ollieapp.MainActivity.onCreate(MainActivity.java:27)
       at android.app.Activity.performCreate(Activity.java:7994)
       at android.app.Activity.performCreate(Activity.java:7978)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7664)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Steps To Reproduce

Unable to reproduce locally. Just getting reports of it in production.

FWIW, with the upgrade we also began using RN screens directly within our app as well (rather than just through the react-navigation integration), with code similar to the following snippet below. The crashes could be due to incorrect usage of ScreenStack and Screen rather than due to the version bump. Also fwiw, we don't call enableScreens() but it's my understanding that this is no longer necessary.

function App() {
  return <View style={{ flex: 1 }}>
    <MainApp/>
    {modalStacks.map(modalStack => {
      return (
        <ScreenStack style={{ flex: 1 }}>
          {modalStack.map(({ Component, params }, i) => {
            return (
              <Screen
                key={i}
                stackAnimation={p.stackAnimation ?? "fade"}
                stackPresentation={Platform.OS === "android" ? "containedTransparentModal" : "push"}
              >
                <Component />
              </Screen>
            );
          })}
        </ScreenStack>
      );
    })}
  </View>;
}

Platform

  • iOS
  • Android

Package versions

package version
react-native 0.63.4
react-navigation 4.4.1
react-navigation-stack 2.8.3
react-native-screens 3.8.0
react-native-safe-area-context 3.2.0
react-native-gesture-handler 1.10.2
react-native-reanimated 1.13.1
expo 42.0.0
@makirby
Copy link

makirby commented Oct 13, 2021

Just checking, have you applied the code mentioned in the link in the 4th stacktrace?

@scottmas
Copy link
Contributor Author

We have not implemented that. To be clear, does that mean I should change the following lines (in comments)?

public class MainActivity extends ReactActivity {
 
    // more methods...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(null);
      // super.onCreate(savedInstanceState); // previously...
      
      //Need the below line for our SplashScreen library...
      SplashScreen.show(this, SplashScreenImageResizeMode.CONTAIN, ReactRootView.class, false);
    }

    // more methods...

@WoLewicki
Copy link
Member

@scottmas, yeah, there is a link to the proper comment directly in the stack trace. I will close it since it is a common issue and already widely discussed (look at #17). Feel free to comment here if something is wrong and we can reopen it.

@scottmas
Copy link
Contributor Author

Thanks for the response!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants