提问者:小点点

SetInterval/SetTimer在背景时间5分钟后不运行-离子型


我有一个定时器的要求,那应该发出通知(我使用一个信号API通知)后,一个特定的用户设置值达到。

例如,如果用户将值设置为7分钟,计时器应在7分钟后发送通知。 用户可以设置的时间从1-59分钟不等。 但是,即使使用后台模式插件(https://github.com/katzer/cordova-plugin-background-mode),我也无法在5分钟后使setInterval/setTimeout函数工作。

尝试使用递归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分钟后计时器似乎不在运行。

知道怎么解决吗?


共1个答案

匿名用户

使用以下插件:cordova-plugin-background

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

            cordova.plugins.backgroundMode.enable();

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

               setInterval(function () {

                  YourFunctionHere();

                }, 300000);
             }
           }, false);

你的应用程序每隔5分钟就会更新一次

300000毫秒=5分钟