-
Notifications
You must be signed in to change notification settings - Fork 7.8k
Description
What happened?
For some time I'd been noticing the crash happening with Jitsi in my android app's Crashlytics dashboard with the summary 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. happening in com.swmansion.rnscreens package. Here is the full stacktrace I'm getting:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{{my_package}/org.jitsi.meet.sdk.JitsiMeetActivity}: E9.m: Unable to instantiate fragment ld.G: calling Fragment constructor caused an exception
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
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:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
Caused by E9.m: Unable to instantiate fragment ld.G: calling Fragment constructor caused an exception
at androidx.fragment.app.Fragment$InstantiationException.<init>(Fragment.java:577)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:695)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:663)
at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:87)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:92)
at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2849)
at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:3008)
at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117)
at androidx.fragment.app.FragmentActivity.lambda$init$3(FragmentActivity.java:139)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:78)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.kt:336)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java)
at org.jitsi.meet.sdk.JitsiMeetActivity.onCreate(JitsiMeetActivity.java)
at android.app.Activity.performCreate(Activity.java:8595)
at android.app.Activity.performCreate(Activity.java:8573)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
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:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
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:677)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:663)
at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:87)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:92)
at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2849)
at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:3008)
at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117)
at androidx.fragment.app.FragmentActivity.lambda$init$3(FragmentActivity.java:139)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:78)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.kt:336)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java)
at org.jitsi.meet.sdk.JitsiMeetActivity.onCreate(JitsiMeetActivity.java)
at android.app.Activity.performCreate(Activity.java:8595)
at android.app.Activity.performCreate(Activity.java:8573)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
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:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
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:66)
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:677)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:663)
at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:87)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:92)
at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2849)
at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:3008)
at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:117)
at androidx.fragment.app.FragmentActivity.lambda$init$3(FragmentActivity.java:139)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:78)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.kt:336)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java)
at org.jitsi.meet.sdk.JitsiMeetActivity.onCreate(JitsiMeetActivity.java)
at android.app.Activity.performCreate(Activity.java:8595)
at android.app.Activity.performCreate(Activity.java:8573)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
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:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
And here is the snippet of how I launch Jitsi activity
fun launch(context: Context, options: JitsiMeetConferenceOptions?) {
val intent = Intent(context, JitsiMeetActivity::class.java)
intent.action = "org.jitsi.meet.CONFERENCE"
intent.putExtra("JitsiMeetConferenceOptions", options)
if (context !is Activity) {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
context.startActivity(intent)
}
I'm not entirely sure how the users get to that crash in the prod environment, locally I was able to reproduce this crash the following way:
- Enable "Don't keep activities" dev setting on the phone
- Launch Jitsi using the snippet above
- Minimize the call and close picture-in-picture
- Attempt to launch jitsi activity again
I'm guessing due to activity being a single task and cleared it tries to restore the state and crashes (but I might be wrong this is only my assumption). The tests were performed on 12.0.0 version of Android SDK
Platform
- Chrome (or Chromium based)
- Firefox
- Safari
- Other desktop browser
- Android browser
- iOS browser
- Electron app
- Android mobile app
- iOS mobile app
- Custom app using a mobile SDK
Browser / app / sdk version
Android SDK 12.0.0
Relevant log output
Reproducibility
- The problem is reproducible on meet.jit.si
More details?
No response