即使浏览器关闭,服务人员也会在后台运行吗?

Posted

技术标签:

【中文标题】即使浏览器关闭,服务人员也会在后台运行吗?【英文标题】:Does service worker runs on background even if browser is closed? 【发布时间】:2017-01-05 04:17:30 【问题描述】:

只有当我打开 chrome 时,我才会在 chrome 中看到 Facebook web 的推送通知。我知道这个通知是通过 service worker 发送的。我想知道即使浏览器关闭或仅在打开 chrome 时这种后台同步是否会继续,只有这些服务工作者同步过程才会开始并开始发送推送通知。

【问题讨论】:

是的,这就是它们的用途 @Jonasw 他们如何进入非活动状态? ***.com/questions/39034950/… @KevinFarrugia 我知道一旦浏览器启动,推送通知就会开始弹出。但我的问题是,即使浏览器关闭,Service Worker 的后台同步也会运行吗? 如果没记错的话,同样的概念也适用于任何 Service Worker API。 【参考方案1】:

首先要说的是,这在一定程度上取决于平台。我对chrome的理解是:

在 Windows 和 Mac OS X 等桌面平台上,浏览器需要运行一些后台进程才能运行服务工作者。在 Mac OS X 上,这很容易检测到,因为浏览器可以没有打开窗口,但浏览器下方仍然有发光的点。

在移动平台上更容易监听事件并以有效的方式处理它们,因此在这些情况下,平台可以唤醒浏览器,然后浏览器将处理任何相应的事件。

以上适用于任何 Service Worker api。

在桌面上:如果浏览器完全关闭,则 Service Worker 将无法运行并且不会调度任何事件(即没有推送或后台同步事件)

在移动设备上:仍会分派事件(即,当用户设备上线并接收推送并引发推送事件时,将触发后台同步)。

【讨论】:

我在 Google 工作,虽然我对 Chrome 的工作原理有很好的了解,但它是一个不断发展的产品,变化非常快。感谢您的提醒,看来我的letsencrypt脚本已经崩溃了。 @GauntFace 如果 chrome 下有点表示它仍在运行,因此根据我的理解,服务人员仍然可以执行后台同步。但是我的问题是如果chrome完全关闭,service worker可以执行后台同步吗? 更新为明确回答否。 感谢您的解释。请让我知道这里是否可以提供一些提示:***.com/questions/58258677/…【参考方案2】:

如果浏览器关闭,我认为 service worker 将无法运行。因为服务人员只有在我打开浏览器后才能发送推送通知。如果它在后台运行,那么即使在关闭浏览器后也可以发送通知。

【讨论】:

在 w3c 文档 (w3c.github.io/ServiceWorker/#user-agent-shutdown) 中还指出,用户代理应存储服务工作者状态以防关闭。这意味着在我看来,如果用户代理关闭,服务工作者将无法工作。 @gosua 你愿意解释一下并给出详细的答案。 我在规范中找不到比这些句子更详细的信息。 “必须在用户代理即将关闭后存储状态”对我来说听起来很像如果用户代理成功关闭,服务工作者将不再存在。【参考方案3】:

有点离题,但如果允许 Chrome 在后台运行(可在设置中配置),则可以编写 Chrome 扩展程序,background script 可以在其中运行。也可以use GCM。

【讨论】:

我想知道 Service Worker 的默认行为。如果我们关闭 chrome,Service Worker 会运行吗? 我已经对其进行了测试,即使 chrome 已关闭(但在后台运行),也可以在 chrome 中运行 Service Worker。我可以发送推送,并且工作人员成功显示了通知。 但我在 chrome 关闭时从未见过通知。一旦我打开我的 chrome,来自不同公司(即 Facebook、Google)的所有推送通知都会开始轰炸我的屏幕。所以我假设关闭浏览器时服务工作者不会运行 @PJagajitPrusty 我刚刚发现在 Chrome 中必须至少安装一个具有background 权限的扩展程序才能正常工作。然后我在系统托盘(Linux、Xfce)中看到 Chrome 图标。

以上是关于即使浏览器关闭,服务人员也会在后台运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

ios - 即使应用程序关闭,我也可以运行后台线程吗

即使应用程序关闭,Xamarin 也会为数据同步形成后台服务

在后台连续运行服务

并发文件上载/下载和运行后台进程

即使我已显着移动,也会在后台更新相同的位置

想写后台位置跟踪应用程序android