Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.2.0
-
None
Description
On Android, there is a small race condition in the code to hide the splash screen when a fade out is used. It may only be visible in certain edge cases, but the net result is that the app will crash.
Specifically, if multiple calls come in to removeSplashScreen in a row, it's possible for the first call to null out splashImageView before the second call uses it (but after the second call tests for splashDialog == null), because of the animation delay.
Crashing code: https://github.com/apache/cordova-plugin-splashscreen/blob/master/src/android/SplashScreen.java#L219
My repro for this scenario is due to having a native dialog box that appears if we have a network connection error when trying to connect to the starting URL (in my case, it is a remote URL). The dialog box has a 'retry' button which allows the user to retry the network request. When the user does this, we tell the webview to load a new URL; the webview then re-initializes the plugin manager, which in turn sends onPause and onDestroy events to the Splash Screen plugin. It's this sequence of events, which, in quick succession, can trigger the crash.