electron - setInterval 在使用 Electron 一小时后停止

标签 electron

希望有人能在这里指出我正确的方向。我的 Electron 应用程序需要每 10 分钟左右执行一次 API 调用。我目前在渲染器进程中使用 setInterval 循环执行此操作,该循环每 10 分钟触发一次。

它通常工作正常,几个小时后它似乎只是停止发射。我有几个进程可以清除并重新启动 setInterval 以尝试解决问题,但似乎没有任何效果。

该应用程序打开新的浏览器窗口并显示内容,这意味着主窗口可能不会一直处于焦点,我怀疑这可能与它有关。

我试过添加

powerSaveBlocker.start("prevent-display-sleep");
powerSaveBlocker.start("prevent-app-suspension");

到我的主要 Electron js 脚本,但它似乎没有效果。该问题主要显示在 Windows 机器上。我不完全确定它是否发生在 Mac 或 Linux 上。

所以我的问题是,有什么理由会导致间隔在某一点后消失? powerSaveBlocker 调用对我来说很有意义,但它们似乎并没有做任何事情。

或者有没有更好的方法让后台进程以可以执行这些 API 调用的间隔运行?我看过node-schedule但我不确定它是否会解决这个问题。

最佳答案

在这里回答我自己的问题,归功于@snwflk,他在对原始帖子的评论中指出了正确的方向。

虽然我无法绝对肯定地澄清这解决了问题,但从那以后我也没有看到这个问题。 (它并不总是 100% 可重复的,并且它很难测试,因为它需要一台机器,单独放置几个小时,这可能会或可能不会显示问题)。

然而,我已经向一些客户推出了修复程序,他们的机器似乎在几天后仍然在线,这是一个好兆头。

因此,解决方案是禁用 backgroundThrottling在主 BrowserWindow对象(间隔在渲染器进程中运行)

文档:https://electronjs.org/docs/api/browser-window#new-browserwindowoptions

一个例子

mainWindow = new BrowserWindow({
    webPreferences: {
        backgroundThrottling: false,
    },
});

仅供引用,有一些错误阻止了此设置的工作,即 https://github.com/electron/electron/issues/20974所以一定要更新你的 Electron 版本。

关于electron - setInterval 在使用 Electron 一小时后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557854/

相关文章:

macos - Electron mac 应用程序的自动更新程序

javascript - 在 Electron Forge 配置中区分 make 和 package

javascript - 显示具有下标(或上标)样式的菜单项标签

javascript - 必须手动启用 Electron 生成器桌面快捷方式图标

electron - 如何在Electron中使用JSONata?

javascript - 如何从 Electron 的主进程中获得根访问权限并使用磁盘使用量(du)?

javascript - 可扩展 Electron 应用程序的架构?

jquery - 在 Electron 中,发出 ajax 请求的最佳方式是什么?

javascript - 在 Electron js 中打开辅助/子窗口时对象已被销毁

node.js - 将 Node 和 MongoDB 打包到应用程序中以安装在桌面中。