Как исправить, что приложение Android Cordova в фоновом режиме меняет все setInterval от 1 до 1 с? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть приложение Android, написанное на Кордове. В этом приложении я вызываю функцию setInterval с интервалом 100 мс. Когда я нахожусь на переднем плане, все в порядке, но всякий раз, когда я go перехожу на задний план, я заметил, что функция вызывается каждые 1 с, а не 100 мсек.

Код для тестирования следующий:

setInterval(function() {
    console.log("Tick: " + new Date().getTime());
}, 100);

Мне действительно нужно, чтобы этот метод вызывался каждые 100 мс в фоновом режиме. Кроме того, устройство всегда подключено к источнику питания, поэтому любые оптимизации, связанные с производительностью в фоновом режиме, я могу проигнорировать, если это поможет.

Кто-нибудь знает, как мне удается, что функция setInterval вызывается каждые 100 мс, а не 1 с, когда приложение в фоновом режиме?

1 Ответ

0 голосов
/ 06 августа 2020

Я искал два дня, и единственное решение, которое я нашел, - это обходной путь, основанный на cordova-plugin-background-mode .

Каждый раз, когда вы go в фоновом режиме с помощью этого метода можно установить видимость веб-просмотра как Visible в вашем Java коде

appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE))

, тогда интервал вернется к 100 мс.

Пример кода:

public class MainActivity extends CordovaActivity implements LifecycleObserver {
    /* .. other code .. */

    // init go to background observer
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onToBackground() {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                appView.getEngine().getView().dispatchWindowVisibilityChanged(View.VISIBLE);
            }
        }, 1000); // wait a second to make sure we are in background state
    }

    /* .. other code .. */
}
    

, где appView - это ваш CordovaWebView в CordovaActivity.

Надеюсь, это поможет, если у вас возникнет такая же проблема. Если есть лучшее решение, дайте мне знать!

...