Skip to content

[Bug]: Android Crash on app destroy: IllegalStateException: Must call 'initWithContext' before use (Regression in OneSignal-Android-SDK 5.9.2) #1149

@escolhatecnologia

Description

@escolhatecnologia

What happened?

I am encountering a fatal crash on Android when the application is closed, minimized, or destroyed by the OS. The crash originates from the OneSignal SDK during the onDetachedFromEngine lifecycle event, specifically throwing an IllegalStateException because it attempts to call getNotifications without proper initialization context.

This issue only started occurring after updating the OneSignal-Android-SDK from version 5.8.1 to 5.9.2. The previous version (5.8.1) handled the app termination lifecycle without throwing this exception.

Stack Trace:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:7003)
  at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:7035)
  at android.app.servertransaction.DestroyActivityItem.execute (DestroyActivityItem.java:52)
  at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:63)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleItem (TransactionExecutor.java:169)
  at android.app.servertransaction.TransactionExecutor.executeTransactionItems (TransactionExecutor.java:101)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:80)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:3150)
  at android.os.Handler.dispatchMessage (Handler.java:110)
  at android.os.Looper.loopOnce (Looper.java:273)
  at android.os.Looper.loop (Looper.java:363)
  at android.app.ActivityThread.main (ActivityThread.java:10060)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:632)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:975)
Caused by java.lang.IllegalStateException: Must call 'initWithContext' before use
  at com.onesignal.internal.OneSignalImp.getServiceWithFeatureGate (OneSignalImp.kt:727)
  at com.onesignal.internal.OneSignalImp.getNotifications (OneSignalImp.kt:130)
  at com.onesignal.OneSignal.getNotifications (OneSignal.kt:62)
  at com.onesignal.flutter.OneSignalNotifications.onDetachedFromEngine (OneSignalNotifications.java:233)
  at com.onesignal.flutter.OneSignalPlugin.onDetachedFromEngine (OneSignalPlugin.java:52)
  at com.onesignal.flutter.OneSignalPlugin.onDetachedFromEngine (OneSignalPlugin.java:48)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.remove (FlutterEngineConnectionRegistry.java:272)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.remove (FlutterEngineConnectionRegistry.java:280)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.removeAll (FlutterEngineConnectionRegistry.java:288)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.destroy (FlutterEngineConnectionRegistry.java:123)
  at io.flutter.embedding.engine.FlutterEngine.destroy (FlutterEngine.java:509)
  at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach (FlutterActivityAndFragmentDelegate.java:784)
  at io.flutter.embedding.android.FlutterActivity.onDestroy (FlutterActivity.java:921)
  at android.app.Activity.performDestroy (Activity.java:9850)
  at android.app.Instrumentation.callActivityOnDestroy (Instrumentation.java:1559)
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:6990)

Steps to reproduce?

1- Open the application.

2- Trigger the app destruction (e.g., closing the app, swiping it away from recents, or simulating an OS-level kill).

3- The app crashes during the FlutterEngine detachment process.

What did you expect to happen?

works without error

OneSignal Flutter SDK version

5.5.5

Which platform(s) are affected?

  • iOS
  • Android

Relevant log output

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:7003)
  at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:7035)
  at android.app.servertransaction.DestroyActivityItem.execute (DestroyActivityItem.java:52)
  at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:63)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleItem (TransactionExecutor.java:169)
  at android.app.servertransaction.TransactionExecutor.executeTransactionItems (TransactionExecutor.java:101)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:80)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:3150)
  at android.os.Handler.dispatchMessage (Handler.java:110)
  at android.os.Looper.loopOnce (Looper.java:273)
  at android.os.Looper.loop (Looper.java:363)
  at android.app.ActivityThread.main (ActivityThread.java:10060)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:632)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:975)
Caused by java.lang.IllegalStateException: Must call 'initWithContext' before use
  at com.onesignal.internal.OneSignalImp.getServiceWithFeatureGate (OneSignalImp.kt:727)
  at com.onesignal.internal.OneSignalImp.getNotifications (OneSignalImp.kt:130)
  at com.onesignal.OneSignal.getNotifications (OneSignal.kt:62)
  at com.onesignal.flutter.OneSignalNotifications.onDetachedFromEngine (OneSignalNotifications.java:233)
  at com.onesignal.flutter.OneSignalPlugin.onDetachedFromEngine (OneSignalPlugin.java:52)
  at com.onesignal.flutter.OneSignalPlugin.onDetachedFromEngine (OneSignalPlugin.java:48)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.remove (FlutterEngineConnectionRegistry.java:272)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.remove (FlutterEngineConnectionRegistry.java:280)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.removeAll (FlutterEngineConnectionRegistry.java:288)
  at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.destroy (FlutterEngineConnectionRegistry.java:123)
  at io.flutter.embedding.engine.FlutterEngine.destroy (FlutterEngine.java:509)
  at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach (FlutterActivityAndFragmentDelegate.java:784)
  at io.flutter.embedding.android.FlutterActivity.onDestroy (FlutterActivity.java:921)
  at android.app.Activity.performDestroy (Activity.java:9850)
  at android.app.Instrumentation.callActivityOnDestroy (Instrumentation.java:1559)
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:6990)

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions