提问人:usualuser 提问时间:12/6/2022 最后编辑:usualuser 更新时间:12/7/2022 访问量:202
Android 和 Webapp,手机锁定时调用后台刷新
Android & Webapp, call background refresh when mobile is locked
问:
对于预订(私人使用)后的警报系统,我希望我的 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);
}
答:
据我所知,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
评论