software-mansion / react-native-screens

Native navigation primitives for your React Native app.
MIT License
3.01k stars 510 forks source link

My app in Android crashes when restoring from the background when I want to use the camera. #2151

Closed alialim closed 3 months ago

alialim commented 3 months ago

Description

Hello everyone,

My app in Android crashes when restoring from the background when I want to use the camera.

Since I've been through all the forums but none of the solutions have helped I'm looking for help here again. I am using React Navigation. In the documentation of React Navigation it says I should add the function

class MainActivity: ReactActivity() { // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(null) } // ... }

to ensure that the app does not crash. The problem is that the app is restarted when the error occurs and the last page is no longer displayed.

Device is: Samsung Galaxy Tab 7 FE 5G

My React Native version:

“react-native”: “0.73.2” “@react-navigation/bottom-tabs”: “^6.5.11”, “@react-navigation/native”: “^6.1.9”, “@react-navigation/stack”: “^6.3.20”, “react-native-screens”: “^3.31.1”,

Here is the logcat excerpt of the error

   E  FATAL EXCEPTION: main
                                                                                                Process:  PID: 6949
                                                                                                java.lang.RuntimeException: Unable to start activity ComponentInfo{eu.fifu.eSASS/eu.fifu.eSASS.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:4164)
                                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322)
                                                                                                    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
                                                                                                    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
                                                                                                    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
                                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                    at android.os.Looper.loopOnce(Looper.java:230)
                                                                                                    at android.os.Looper.loop(Looper.java:319)
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:8913)
                                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
                                                                                                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:690)
                                                                                                    at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
                                                                                                    at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525)
                                                                                                    at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:84)
                                                                                                    at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:91)
                                                                                                    at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2562)
                                                                                                    at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2722)
                                                                                                    at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117)
                                                                                                    at androidx.fragment.app.FragmentActivity.lambda$init$3$androidx-fragment-app-FragmentActivity(FragmentActivity.java:139)
                                                                                                    at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda3.onContextAvailable(Unknown Source:2)
                                                                                                    at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.kt:84)
                                                                                                    at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:358)
                                                                                                    at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216)
                                                                                                    at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:45)
                                                                                                    at android.app.Activity.performCreate(Activity.java:8960)
                                                                                                    at android.app.Activity.performCreate(Activity.java:8929)
                                                                                                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
                                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4146)
                                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322) 
                                                                                                    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) 
                                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685) 
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                    at android.os.Looper.loopOnce(Looper.java:230) 
                                                                                                    at android.os.Looper.loop(Looper.java:319) 
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:8913) 
                                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) 
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 
                                                                                                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:672)
                                                                                                    at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
                                                                                                    at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525) 
                                                                                                    at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:84) 
                                                                                                    at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:91) 
                                                                                                    at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2562) 
                                                                                                    at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2722) 
                                                                                                    at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117) 
                                                                                                    at androidx.fragment.app.FragmentActivity.lambda$init$3$androidx-fragment-app-FragmentActivity(FragmentActivity.java:139) 
                                                                                                    at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda3.onContextAvailable(Unknown Source:2) 
                                                                                                    at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.kt:84) 
                                                                                                    at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:358) 
                                                                                                    at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216) 
                                                                                                    at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:45) 
                                                                                                    at android.app.Activity.performCreate(Activity.java:8960) 
                                                                                                    at android.app.Activity.performCreate(Activity.java:8929) 
                                                                                                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456) 
                                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4146) 
                                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322) 
                                                                                                    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) 
                                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685) 
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                    at android.os.Looper.loopOnce(Looper.java:230) 
                                                                                                    at android.os.Looper.loop(Looper.java:319) 
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:8913) 
                                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) 
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 
                                                                                                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:57)
                                                                                                    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:672) 
                                                                                                    at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 
                                                                                                    at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525) 
                                                                                                    at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:84) 
                                                                                                    at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:91) 
                                                                                                    at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2562) 
                                                                                                    at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2722) 
                                                                                                    at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117) 
                                                                                                    at androidx.fragment.app.FragmentActivity.lambda$init$3$androidx-fragment-app-FragmentActivity(FragmentActivity.java:139) 
                                                                                                    at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda3.onContextAvailable(Unknown Source:2) 
                                                                                                    at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.kt:84) 
                                                                                                    at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:358) 
                                                                                                    at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216) 
                                                                                                    at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:45) 
                                                                                                    at android.app.Activity.performCreate(Activity.java:8960) 
                                                                                                    at android.app.Activity.performCreate(Activity.java:8929) 
                                                                                                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456) 
                                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4146) 
                                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322) 
                                                                                                    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) 
                                                                                                    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) 
                                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685) 
                                                                                                    at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                    at android.os.Looper.loopOnce(Looper.java:230) 
                                                                                                    at android.os.Looper.loop(Looper.java:319) 
                                                                                                    at android.app.ActivityThread.main(ActivityThread.java:8913) 
                                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) 
                                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 

Many thanks to everyone who can help me here.

Steps to reproduce

See Description

Snack or a link to a repository

https://stackoverflow.com/help/mcve

Screens version

3.31.1

React Native version

0.73.2

Platforms

Android

JavaScript runtime

None

Workflow

React Native (without Expo)

Architecture

Fabric (New Architecture)

Build type

Debug mode

Device

Real device

Device model

Samsung Galaxy Tab 7 FE 5G (Android 14)

Acknowledgements

Yes

github-actions[bot] commented 3 months ago

Hey! 👋

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

Could you provide a snack or a link to a GitHub repository under your username that reproduces the problem?

acarkaan commented 3 months ago

same on me ; Screens version 3.31.1 Device model Xioami 9t pro - Android 11 react-native 0.74.1 i complated all of installation steps.

alialim commented 3 months ago

@acarkaan

Yesterday I also updated to the latest React native version 0.74.1 and updated all packages to the latest version. But still the same error. My ideas are slowly coming to an end.

acarkaan commented 3 months ago

@alialim thanks for your message, i try to solve problem too ı guess problem releated mainapplication.kt super class

Basil-Code commented 3 months ago

@alialim I think the issue is solved here https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 and also this explains the issue of restoring the app from the background https://github.com/software-mansion/react-native-screens?tab=readme-ov-file#android

kkafar commented 3 months ago

Hey, exactly as @Basil-Code has pointed out, this is a long standing issue due to how React & Android interact with each other (this is discussed in #17). For now the recommendation is to follow library's installation steps.

I'm closing the issue, but not restricting discussion. Feel free to tag me if there is any breakthrough.

acarkaan commented 3 months ago

@alialim

** libs "react": "18.2.0", "react-native": "0.73.0", "react-native-screens": "^3.31.1",

** file: mainactivity.kt

....
import android.os.Bundle;
....

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(null);
        .........
}

** device Xioami 9T Oppo 6pro

** comment please dont forget build clean and ı noticed another thing that problem was model based.While it crashed on the Xiaomi device, it was working fine on the oppo. 3.31.1 version solved xiomi too