Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.7.0
-
None
-
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.
Attachments
Issue Links
- relates to
-
CB-3767 Timers error out when closing an app using CordovaWebView
- Closed