javascript - 在 PWA 中保持计时器运行的最佳实践

标签 javascript reactjs timer progressive-web-apps

我正在使用 React 构建一个渐进式 Web 应用程序,其概念围绕着保持计时器运行。

For context, the app is for home-brewers to keep track of when hops and other additions need to be added to their boil during their brew. Additions are added with a certain amount of time remaining in the boil, i.e. 1 oz Citra hops at 20 minutes remaining.

我使用 JavaScript 的 setInterval 来“勾选”计时器,这是一个驱动应用程序其余部分的 elapsedSeconds 状态属性。

我遇到的问题是计时器停止计时。如果我让应用程序运行,屏幕最终将锁定,或者我将切换应用程序等。服务工作人员将继续运行,并且计时器将继续滴答作响,时间很短(据我所知大约 10 分钟)正在测试中?)

我的想法是,我将在状态中存储一个纪元时间,它代表计时器启动的时间。这样,当用户“返回”PWA 时,我可以将当​​前纪元时间与存储的 startingEpochTime 进行比较,以获取 elapsedSeconds。但如果不需要的话,我不想在每次“滴答”时都进行这种比较。理想情况下,只有当用户从其他上下文返回应用程序且服务工作线程已经停止处理时,才会运行此比较。

我正在寻找的是执行此操作的正确方法。 window.onload 在这种情况下可以工作吗?如果我将应用程序切换到另一个应用程序 20 分钟,然后切换回我的计时器应用程序,该方法是否会再次运行?寻找此类场景的最佳实践,或任何可能对我有帮助的想法。

最佳答案

截至 2022 年,当 PWA 移至后台时,无法安排任务或保持计时器运行。

对于所有想要此功能的人,请在 Google 问题上加注星标并发表评论,要求其采取行动:https://bugs.chromium.org/p/chromium/issues/detail?id=889077

关于javascript - 在 PWA 中保持计时器运行的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244539/

相关文章:

javascript - 为什么 es6 中的 import 在这里不起作用?

javascript - 状态未在地理定位函数中使用 setState 进行更新

swift - 测量调用方法 "didUpdateValueFor"之间的时间

javascript - 本地存储获取后对象未更新

javascript - 焦点事件不会在输入字段上触发(无 jQuery)

javascript - html中父级可点击组件内的可点击组件

javascript - 如何在代码之间使用ActivityIndi​​cator?

reactjs - 如何将 Prop 传递给 react 表中的行

angular - RxJS 使用异步管道成功处理

c++ - Boost timer - 如何设置细节级别,我想要微秒?