setInterval / setTimer не работает через 5 минут фонового времени - Ionic - PullRequest
0 голосов
/ 10 июля 2020

У меня есть требование к таймеру, который должен отправлять уведомление (я использую уведомление oneignal API) после достижения определенного пользователем значения.

Например, если пользователь устанавливает значение 7 минут , таймер должен отправить уведомление через 7 минут. Время, которое может установить пользователь, варьируется от 1 до 59 минут. Но даже с использованием плагина фонового режима (https://github.com/katzer/cordova-plugin-background-mode) я не могу заставить функции setInterval / setTimeout работать через 5 минут.

Пробовал использовать рекурсивный метод setTimeout:

function startTimerCounter() {
  this.timerCounter = 0;
  const objThis = this; //store this.

  if (this.timerCounter >= this.setTime) {
    this.backgroundMode.disable();
    this.goalTimerReached = true;
  } else {
    this.backgroundMode.enable();
    this.timer = setTimeout(function request() {
      if (objThis.timerCounter === objThis.setTime) {
        //onesignal notification
        clearTimeout(objThis.timer);
      } else {
        ++objThis.timerCounter;
        objThis.timer = setTimeout(request, 1000);
      }
    }, 1000);
  }
}

Пробовал использовать метод setInterval:

function startTimerCounter() {
  this.timerCounter = 0;
  const objThis = this; //store this.

  if (this.timerCounter >= this.setTime) {
    this.backgroundMode.disable();
    this.goalTimerReached = true;
  } else {
    this.backgroundMode.enable();
    this.timerCounter = 0;
    const objThis = this; //store this.
    this.timer = setInterval(() => {
      if (objThis.timerCounter === objThis.setTime) {
        //onesignal notification
        clearInterval(objThis.timer);
      } else {
        ++objThis.timerCounter;
      }
    }, 1000);
  }
}

Уведомление об активации фона вверху, и я вижу, что фоновый режим активен. Но таймер, похоже, не запускается через 5 минут.

есть идеи, как это можно решить?

*** Обновление ****

Пытался вызывать функцию каждые 4 минуты в фоновом режиме, чтобы продолжить работу, что у меня не сработало:

function startTimerCounter() {
      this.timerCounter = 0;
      const objThis = this; //store this.

      if (this.timerCounter >= this.setTime) {
        this.backgroundMode.disable();
        this.goalTimerReached = true;
      } else {
        this.backgroundMode.enable();
        this.timerCounter = 0;
        const objThis = this; //store this.
        this.timer = setInterval(() => {
          if (objThis.timerCounter === objThis.setTime) {
            //onesignal notification
            clearInterval(objThis.timer);
          } else {
            ++objThis.timerCounter;
          }
        }, 1000);

     this.backgroundMode.on('activate').subscribe(() => {
        setInterval(function () {
          this.startTimerCounter();
        }, 240000);
      })
      }
    }

1 Ответ

0 голосов
/ 10 июля 2020

используйте этот плагин: cordova-plugin-background

document.addEventListener('deviceready', function () {

            cordova.plugins.backgroundMode.enable();

             cordova.plugins.backgroundMode.onactivate = function () {

               setInterval(function () {

                  YourFunctionHere();

                }, 300000);
             }
           }, false);

ваше приложение хорошо обновляется в фоновом режиме каждые 5 минут

300000 миллисекунд = 5 минут

...