[ 
https://issues.apache.org/jira/browse/CB-3766?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13680870#comment-13680870
 ] 

Peter commented on CB-3766:
---------------------------

My environment is: Android-17. Cordova 2.7.0. Galaxy Nexus emulator.

*Re your suggestion that we should just ignore the error in logcat which looks 
like "TIMEOUT ERROR":*
Unfortunately, for us it doesn't get as far as saying "TIMEOUT ERROR" because 
it fails 1 line before within the me.stopLoading(). Please see the logcat 
output in the original post.

*Re your comment "By trying to resolve it the way you're doing, you're causing 
it to stack dump":* 
In fact, I haven't tried to resolve anything. My code fragment was old code 
which previously worked in Cordova 2.4.0.

*Re the test code example:*
I looked at the test code in CordovaWebTestViewActivity. Can you explain why 
the line
{code}
cordovaWebView.loadUrl("javascript:try{cordova.require('cordova/channel').onDestroy.fire();}catch(e){console.log('exception
 firing destroy event from native');};");
{code}
is there? Isn't that also what the cordovaWebView.handleDestroy() is trying to 
do? 

*Re is this or is this not a bug:*
I agree perhaps our implementation of onDestroy() is a bit overkill. But the 
fact remains that our exact same code previously worked OK for Cordova 2.4.0, 
and now for Cordova 2.7.0 it doesn't work. If it looks like a duck and it swims 
like a duck and it quacks like a duck then I suggest it is a duck.

*Re my suspicions about CB-2458:*
Do you think plugin initialization (and the accompanying timeout logic) is an 
unusual thing to do during handleDestroy() or not? I'm not sure, but that 
CB-2458 change from loadUrl to loadUrlIntoView in handleDestroy() seems to have 
been the root cause of my trouble.
                
> Introduced bug causes Android stacktrace during cleanup of CordovaWebView
> -------------------------------------------------------------------------
>
>                 Key: CB-3766
>                 URL: https://issues.apache.org/jira/browse/CB-3766
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android
>    Affects Versions: 2.7.0
>            Reporter: Peter
>            Assignee: Joe Bowser
>
> 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:
> {code}
> 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();
> }
> {code}
> After 1st page is rendered, I cause the destroy event by pressing the device 
> BACK button.
> This is always resulting in a stacktrace:
> {code}
> 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)
> {code}
> 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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to