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

Introduced bug causes Android stacktrace during cleanup of CordovaWebView



    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7.0
    • None
    • cordova-android
    • None


      This was already reprted on the PG Forum, where it was confirmed as a Cordova bug.

      I am using Cordova v2.7.0.

      My Main Android Activity looks like this:

      public class MainActivity extends Activity implements CordovaInterface {
      CordovaWebView cwv;
      //Destruction code is as follows
      public void onDestroy() {
        if (cwv != null) {
            cwv = null;

      After 1st page is rendered, I cause the destroy event by pressing the device BACK button.

      This is always resulting in a stacktrace:

      06-11 00:49:57.446: I/Web Console(823): onPause() called at file:///android_asset/app1/index.html:11
      06-11 00:49:58.762: W/IInputConnectionWrapper(823): showStatusIcon on inactive InputConnection
      06-11 00:50:02.222: D/webviewglue(823): nativeDestroy view: 0x2a24bdb0
      06-11 00:50:22.292: D/AndroidRuntime(823): Shutting down VM
      06-11 00:50:22.292: W/dalvikvm(823): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
      06-11 00:50:22.334: E/AndroidRuntime(823): FATAL EXCEPTION: main
      06-11 00:50:22.334: E/AndroidRuntime(823): java.lang.NullPointerException
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.webkit.WebViewClassic.stopLoading(WebViewClassic.java:2645)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.webkit.WebView.stopLoading(WebView.java:895)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at org.apache.cordova.CordovaWebView$2.run(CordovaWebView.java:421)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.os.Handler.handleCallback(Handler.java:725)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.os.Handler.dispatchMessage(Handler.java:92)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.os.Looper.loop(Looper.java:137)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at android.app.ActivityThread.main(ActivityThread.java:5041)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at java.lang.reflect.Method.invokeNative(Native Method)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at java.lang.reflect.Method.invoke(Method.java:511)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
      06-11 00:50:22.334: E/AndroidRuntime(823):     at dalvik.system.NativeStart.main(Native Method)

      It appears CordovaWebView.handleDestroy() is calling loadUrlIntoView(url) which reinitialises plugins and spawns a thread to handle potential timeouts.
      My stacktrace seems caused by the timeout thread (in CordovaWebView) thinking that a timeout has occurred (because the flag loadUrlTimeout does not indicate otherwise)

      I believe my cleanup code onDestroy() is implemented correctly. If not, then how should I do it?

      BTW, This same problem did not occur in Cordova v2.4

      More notes:

      • I am suspicious that the problem is introduced by the fix for CB-2458. To deliberately cause plugin initialization during destruction seems strange.
      • I am suspicious that the removal of baseUrl in CB-2534, means the CB-2458 is maybe not even needed anymore, so perhaps original code can be re-instated.


        Issue Links



              bowserj Joey Robert Bowser
              dinglemouse Peter
              0 Vote for this issue
              3 Start watching this issue