Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-10692

[Android] SplashScreen plugin crashes due to race condition on hide

    XMLWordPrintableJSON

Details

    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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              dpolivy Dan Polivy
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: