cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "hugefactory (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CB-8383) pause event don't fire when 'KeepRunning' is false
Date Fri, 30 Jan 2015 16:33:35 GMT

     [ https://issues.apache.org/jira/browse/CB-8383?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

hugefactory updated CB-8383:
----------------------------
    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{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception
firing pause event from native');};");

        // Forward to plugins
        if (this.pluginManager != null) {
            this.pluginManager.onPause(keepRunning);
        }

        // If app doesn't want to run in background
        if (!keepRunning) {
            // Pause JavaScript timers (including setInterval)
            this.pauseTimers();
        }
        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() {
                LOG.d(TAG, "Handle the pauseTimers");
                pauseTimers();
              }
            }, 1000);
        }

Thanks.

  was:
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{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception
firing pause event from native');};");

        // Forward to plugins
        if (this.pluginManager != null) {
            this.pluginManager.onPause(keepRunning);
        }

        // If app doesn't want to run in background
        if (!keepRunning) {
            // Pause JavaScript timers (including setInterval)
            this.pauseTimers();
        }
        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() {
                LOG.d(TAG, "Handle the pauseTimers");
                pauseTimers();
              }
            }, 1000);
        }

Thanks.


> pause event don't fire when 'KeepRunning' is false
> --------------------------------------------------
>
>                 Key: CB-8383
>                 URL: https://issues.apache.org/jira/browse/CB-8383
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android
>    Affects Versions: Master, 3.5.0, 4.0.0, 4.1.3
>         Environment: Mac osx 10.9
>            Reporter: hugefactory
>              Labels: easyfix
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> 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{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception
firing pause event from native');};");
>         // Forward to plugins
>         if (this.pluginManager != null) {
>             this.pluginManager.onPause(keepRunning);
>         }
>         // If app doesn't want to run in background
>         if (!keepRunning) {
>             // Pause JavaScript timers (including setInterval)
>             this.pauseTimers();
>         }
>         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() {
>                 LOG.d(TAG, "Handle the pauseTimers");
>                 pauseTimers();
>               }
>             }, 1000);
>         }
> Thanks.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org


Mime
View raw message