react-native-screens icon indicating copy to clipboard operation
react-native-screens copied to clipboard

App crashing frequently because of this error

Open rakeshp947 opened this issue 2 years ago • 16 comments

Hi, App is crashing frequently because of this error - java.lang.IllegalStateException com.swmansion.rnscreens.ScreenFragment.

Steps To Reproduce

I don't have the exact steps to reproduce this error, but I can see the google playstore console logs.

Expected behavior

The app should not crash.

Actual behavior

App is crashing frequently

Platform

Android 9 (SDK 28) Android 10 (SDK 29)

  • Only Android

Workflow

  • [ NO ] Managed workflow
  • [ YES ] Bare workflow

Package versions

package version
@react-native-async-storage/async-storage 1.17.3
@react-native-firebase/analytics 14.9.3
@react-native-firebase/app 14.9.3
@react-navigation/native 6.0.10
@react-navigation/native-stack 6.6.2
@react-navigation/stack 6.2.1
react 17.0.2
react-native 0.68.1
react-native-admob-native-ads 0.6.0
react-native-fast-image 8.5.11
react-native-fbads 7.1.0
react-native-fbsdk 3.0.0
react-native-gesture-handler 2.4.0
react-native-image-progress 1.2.0
react-native-image-zoom-viewer 3.0.1
react-native-modal-overlay 1.3.1
react-native-pager-view 5.4.15
react-native-push-notification 8.1.1
react-native-safe-area-context 4.2.4
react-native-screens 3.13.1
react-native-share 7.3.7
react-native-splash-screen 3.3.0
react-native-tab-view 3.1.1
react-native-vector-icons 9.1.0
react-native-video 5.2.0
recyclerlistview 3.0.5
rn-fetch-blob 0.12.0

Google PlayStore Console Logs (Prod)

java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2991) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3126) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1846) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:201) at android.app.ActivityThread.main (ActivityThread.java:6882) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873) Caused by: androidx.fragment.app.Fragment$InstantiationException: at androidx.fragment.app.Fragment.instantiate (Fragment.java:67) at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java) at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:17) at androidx.fragment.app.FragmentStateManager.<init> (FragmentStateManager.java:15) at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:108) at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:8) at androidx.fragment.app.FragmentActivity$2.onContextAvailable (FragmentActivity.java:30) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable (ContextAwareHelper.java:20) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:7) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java) at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:10) at com.facebook.react.ReactActivity.onCreate (ReactActivity.java) at com.nicestatus.MainActivity.onCreate (MainActivity.java:3) at android.app.Activity.performCreate (Activity.java:7232) at android.app.Activity.performCreate (Activity.java:7221) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2971) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3126) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1846) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:201) at android.app.ActivityThread.main (ActivityThread.java:6882) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873) 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:21) at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java) at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:17) at androidx.fragment.app.FragmentStateManager.<init> (FragmentStateManager.java:15) at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:108) at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:8) at androidx.fragment.app.FragmentActivity$2.onContextAvailable (FragmentActivity.java:30) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable (ContextAwareHelper.java:20) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:7) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java) at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:10) at com.facebook.react.ReactActivity.onCreate (ReactActivity.java) at com.nicestatus.MainActivity.onCreate (MainActivity.java:3) at android.app.Activity.performCreate (Activity.java:7232) at android.app.Activity.performCreate (Activity.java:7221) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2971) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3126) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1846) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:201) at android.app.ActivityThread.main (ActivityThread.java:6882) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873) Caused by: java.lang.IllegalStateException: at com.swmansion.rnscreens.ScreenFragment.<init> (ScreenFragment.java:23) at com.swmansion.rnscreens.ScreenStackFragment.<init> (ScreenStackFragment.java) 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:21) at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java) at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:17) at androidx.fragment.app.FragmentStateManager.<init> (FragmentStateManager.java:15) at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:108) at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:8) at androidx.fragment.app.FragmentActivity$2.onContextAvailable (FragmentActivity.java:30) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable (ContextAwareHelper.java:20) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:7) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java) at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:10) at com.facebook.react.ReactActivity.onCreate (ReactActivity.java) at com.nicestatus.MainActivity.onCreate (MainActivity.java:3) at android.app.Activity.performCreate (Activity.java:7232) at android.app.Activity.performCreate (Activity.java:7221) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2971) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3126) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1846) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:201) at android.app.ActivityThread.main (ActivityThread.java:6882) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)

Please look into this error. Thank you :)

rakeshp947 avatar Jun 16 '22 16:06 rakeshp947

Hey! 👋

It looks like you've omitted a few important sections from the issue template.

Please complete Description and Reproduction sections.

github-actions[bot] avatar Jun 16 '22 16:06 github-actions[bot]

Hey! 👋

The issue doesn't seem to contain a minimal reproduction.

Could you provide a snippet of code, a snack or a link to a GitHub repository that reproduces the problem?

github-actions[bot] avatar Jun 16 '22 16:06 github-actions[bot]

Already mentioned all the details, please look at it ASAP.

rakeshp947 avatar Jun 17 '22 04:06 rakeshp947

Any update on this? I am having a lot of crashes because of this in prod. :(

rakeshp947 avatar Jun 18 '22 05:06 rakeshp947

Can confirm that this is happening on RN 0.68.2 as well

zienna avatar Jun 24 '22 15:06 zienna

Same here, I add everything to. MainActivity

ChernenkoDmitriy avatar Jun 27 '22 11:06 ChernenkoDmitriy

Also affected by this on 0.68.2 with correct android MainActivity.java modifications. Again picked up through google play logs (happening often), but unable to reproduce exact steps.

chvanlennep avatar Jun 29 '22 15:06 chvanlennep

Did you follow the required steps from the main README file? See https://github.com/software-mansion/react-native-screens#android.

WoLewicki avatar Jun 30 '22 15:06 WoLewicki

Yes:

import android.os.Bundle;

and then to the MainActivityDelegate class:

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

chvanlennep avatar Jun 30 '22 16:06 chvanlennep

Seems weird that it happens after this change. It's hard to say anything definitive without a reproduction unfortunately. Is your stack trace the same @chvanlennep ?

WoLewicki avatar Jul 01 '22 19:07 WoLewicki

Looks like it:

java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:4035) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:4201) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:103) 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:2438) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:226) at android.os.Looper.loop (Looper.java:313) at android.app.ActivityThread.main (ActivityThread.java:8669) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135) Caused by: androidx.fragment.app.Fragment$InstantiationException: at androidx.fragment.app.Fragment.instantiate (Fragment.java:631) at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:57) at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:483) at androidx.fragment.app.FragmentStateManager.<init> (FragmentStateManager.java:85) at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:2728) at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:198) at androidx.fragment.app.FragmentActivity$2.onContextAvailable (FragmentActivity.java:149) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable (ContextAwareHelper.java:99) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:322) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:273) at com.facebook.react.ReactActivity.onCreate (ReactActivity.java:45) at android.app.Activity.performCreate (Activity.java:8290) at android.app.Activity.performCreate (Activity.java:8270) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1329) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:4009) 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:613) Caused by: java.lang.IllegalStateException: at com.swmansion.rnscreens.ScreenFragment.<init> (ScreenFragment.kt:53) at com.swmansion.rnscreens.ScreenStackFragment.<init> (ScreenStackFragment.kt:36)

chvanlennep avatar Jul 07 '22 10:07 chvanlennep

same issue here, any workaround?

fmendoza avatar Jul 18 '22 20:07 fmendoza

I'm facing it too, according to Play Store crash details, it is only appearing on Android 8: image

beqramo avatar Aug 15 '22 10:08 beqramo

It would be best if you could provide a repo with a reproduction of the issue so we could work on it, it is hard to say much without it unfortunately 😞

WoLewicki avatar Aug 16 '22 09:08 WoLewicki

Hi! Do somebody knows the difference between using the line super.onCreate(savedInstanceState) instead of super.onCreate(null)? I can't find a clear explanation about it.

sebadiaz-arg avatar Aug 19 '22 17:08 sebadiaz-arg

@sebadiaz-arg

https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-425179033

this issue comments may help you.

peanudge avatar Aug 26 '22 04:08 peanudge

For our team, this issue is causing a 3% crash rate (the rate at which total sessions vs crashes per session exist) which is quite a large number for one package. It's possible that the quick fix Override worked before for previous years, but perhaps React Native, React Navigation, Android, or hardware itself has changed something which could mean changing the react-native-screens code to adapt. Edit: Yesterday (10-25), this issue caused a massive 10% crash rate. It seems to fluctuate between 2-10%, depending on the day. Average of 3%.

Our code follows the instructions as written to include the Override and the import android.os.bundle. There is no official reproduction of the error since it's not so cookie cutter styled like that. When I've seen it on my phones, it appears to be once the app has been in the background for a few minutes and then reopening it again. Most of the time, it will not happen, but it will sometimes. Perhaps there's some memory or battery management happening with Android I am unaware of causing a difference re-initializing the app, but I'm only making guesses here.

This is happening on all versions of Android. I cannot give you an open source repo because our company does not disclose that. The app relies on react-navigation which relies on react-native-screens, otherwise I would just remove the package to solve the problem. This error/crash can be assumed to be happening before the JS is loaded in because it is not being detected inside our JS error reporting package (react-native-sentry), and is being reported only by the Play Store, indicating it's likely a native code issue.

Here is the trace according to Play Store's data.

Exception java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:4237) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:4403) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:104) 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:2498) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:226) at android.os.Looper.loop (Looper.java:313) at android.app.ActivityThread.main (ActivityThread.java:8855) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135) Caused by androidx.fragment.app.Fragment$f: Unable to instantiate fragment com.swmansion.rnscreens.q: calling Fragment constructor caused an exception at androidx.fragment.app.Fragment.V (Fragment.java:6) at androidx.fragment.app.g.e at androidx.fragment.app.n$e.a at androidx.fragment.app.u. (FragmentStateManager.java:12) at androidx.fragment.app.n.e1 (FragmentManager.java:11) at androidx.fragment.app.i.w (FragmentController.java:2) at androidx.fragment.app.e$b.a (FragmentActivity.java:5) at a.a.c (ContextAwareHelper.java:3) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:2) at androidx.fragment.app.e.onCreate (FragmentActivity.java:1) at com.facebook.react.k.onCreate (ReactActivity.java:1) at android.app.Activity.performCreate (Activity.java:8326) at android.app.Activity.performCreate (Activity.java:8306) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1347) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:4212) Caused by java.lang.reflect.InvocationTargetException: at java.lang.reflect.Constructor.newInstance0 at java.lang.reflect.Constructor.newInstance (Constructor.java:343) at androidx.fragment.app.Fragment.V (Fragment.java:3) 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-<US_SOCIAL_SECURITY_NUMBER> to properly configure your main activity. at com.swmansion.rnscreens.n. (ScreenFragment.kt:6) at com.swmansion.rnscreens.q. (ScreenStackFragment.kt:2)

evan1715 avatar Oct 26 '22 18:10 evan1715

Ok, here's an idea I'll try that is not directly stated in the directions of the README.

The Override call was added inside the public static class MainActivityDelegate extends ReactActivityDelegate {} function. However, I will instead place this inside the parent function public class MainActivity extends ReactActivity {} above it. I do not know if it will fix it, I just added it where I saw other "Override" terms, and assume that applied.

If this is the difference in what fixes the issue, then please add the specific in the README to add it in the parent one that starts with public class MainActivity extends ReactActivity {} and not the other one.

I'll report back after a while to see if this was my issue. If others have this placement as well or have already tried this placement, do comment on it.

image

evan1715 avatar Oct 26 '22 19:10 evan1715

@evan1715 did it help?

xarcnovn avatar Nov 02 '22 11:11 xarcnovn

@evan1715 did it help?

@xarcnovn Yeah, actually. It does seem to have fixed it.

The documentation for this package and for react-navigation should be updated to clarify location.

I do not know if what I did applies to other people's issues with it.

evan1715 avatar Nov 02 '22 19:11 evan1715