Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
Master, 3.5.0, 4.0.0, 4.1.3
-
None
-
None
-
Mac osx 10.9
Description
Under Android, when a project use 'KeepRunning=false' in the config.xml file, the 'pause' event in javascript don't fire when application go to background. Next, 'pause' event fire when 'resume' is call and when the application resume.
The problem is in 'CordovaWebView.java' in the 'handlePause' method :
public void handlePause(boolean keepRunning) {
LOG.d(TAG, "Handle the pause");
// Send pause event to JavaScript
this.loadUrl("javascript:try
catch(e)
{console.log('exception firing pause event from native');};");
// Forward to plugins
if (this.pluginManager != null)
// If app doesn't want to run in background
if (!keepRunning)
paused = true;
}
As you can see, 'pauseTimers()' is call immediatly when we choose 'KeepRunning' false.
According to the Android documentation, 'pauseTimer()' stop all javascript activity....then the 'pause' javascript callback is not execute (it's execute after, when the 'resumeTimers()' is call and the application resume.
I suggest to delay the 'pauseTimers()' for 1 or 2 sec. Then the javascript 'pause' can execute before the application is really stop :
//OLD
//this.pauseTimers();
//NEW
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run()
}, 1000);
}
Thanks.
Attachments
Attachments
Issue Links
- links to