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

Introduced bug causes Android stacktrace during cleanup of CordovaWebView

VotersWatch issueWatchersLinkUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

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

    Description

      This was already reprted on the PG Forum, where it was confirmed as a Cordova bug.
      https://groups.google.com/forum/?fromgroups#!topic/phonegap/NXRvkE8Euls

      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
      
      @Override
      public void onDestroy() {
        if (cwv != null) {
            cwv.handlePause(true);
            cwv.handleDestroy();
            cwv.removeAllViews();
            cwv.destroy();
            cwv = null;
        }               
        super.onDestroy();
      }
      

      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.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

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

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment