Android 和 Webapp,手机锁定时调用后台刷新

Android & Webapp, call background refresh when mobile is locked

提问人:usualuser 提问时间:12/6/2022 最后编辑:usualuser 更新时间:12/7/2022 访问量:202

问:

对于预订(私人使用)后的警报系统,我希望我的 Web 应用程序发送通知。 我希望每 X 分钟进行一次 ajax 调用,检查是否有新的预留,如果有,则发送通知。 除非手机被锁定,否则我对操作和发送通知没有问题。

我看过几篇关于这个主题的帖子,但它们已经过时了。 我尝试了settimetout,setinterval和background-timer,但没有成功。

也许今天有办法?

编辑: 更清楚。即使手机被锁定,我的 Web 应用程序也能设法发送通知,但验证间隔似乎是随机的。 例如,setInterval 为 1 分钟的测试在 2 分钟后向我发送通知,然后在 5 分钟后向我发送通知......并不总是具有相同的间隔。

编辑2: 作为对 Gowtham K K 的回应,我尝试将 Web Worker 用于 setInterval,但在移动设备被锁定时它不起作用。

我的主页中的代码:

 if(window.Worker){     
        var myWorker = new Worker("sw2.js");
        myWorker.postMessage(0);
        myWorker.onmessage = function(e){
            var dt = new Date();
            var hm = dt.toISOString().substring(11, 19);
            _test.innerHTML += hm+"<br>";           
        }    
    }

sw2.js 中的代码

self.onmessage = function(e) {
  self.postMessage(0);  
  init();
}

function init() {
   setInterval(send,60000);
}
function send() {
   self.postMessage(0); 
}
JavaScript android webapp2 已锁定

评论

0赞 Gabe Sechan 12/6/2022
当手机被锁定时,手机将进入省电模式。这意味着应用程序(包括浏览器)获得的处理机会越来越少。这是因为您正在做的事情是最糟糕的方法 - 它不仅会给您带来大量流量,而且还会通过不断打开蜂窝无线电来耗尽设备上的电池。相反,当有新数据可用时,请使用 websocket 并向 Web 应用推送通知。或者使用本机应用程序并推送消息。
0赞 usualuser 12/6/2022
好的,我明白了。也许使用网络工作者呢?

答:

0赞 Gowtham K K 12/7/2022 #1

据我所知,Service Worker 至少可以解决您的大部分问题。 Service Worker 是网站的后台工作线程。大多数现代浏览器都支持它。

它充当浏览器和 Web 服务器之间的代理层。例如,当用户打开网络应用程序,然后互联网断开连接时。那时,您可以在 Service Worker 中注册,因此当用户再次连接到互联网时,即使用户没有看到网页,您也可以使 Service Worker 任务运行。 在这里,您可以在 Service Worker 内部处理推送通知。

Service Worker 有自己的生命周期。

在这种情况下,您可以尝试在 Service Worker 中运行后台计时器并处理推送通知。

一些有用的链接:

https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API

https://medium.com/@a7ul/beginners-guide-to-web-push-notifications-using-service-workers-cb3474a17679