跳到主要内容

Electron 退出相关事件监听

监听退出相关事件可以让我们在应用退出前执行一些重要操作,如数据保存、资源清理等。本文将介绍几个常用的退出事件及其使用方法。

before-quit 事件

before-quit事件会在应用程序开始关闭窗口之前触发。我们可以在这个事件的监听器中执行一些退出前的数据保存等操作。

示例代码

const { app } = require('electron');

app.on('before-quit', (event) => {
console.log('应用程序准备退出...');

// 执行数据保存等操作
event.preventDefault(); // 阻止默认行为,应用不会退出
saveData().then(() => {
app.quit(); // 数据保存完成后,再退出应用
});
});

上面的代码中,我们监听了before-quit事件,在事件处理函数中执行数据保存操作。注意要调用event.preventDefault()阻止默认的退出行为,然后在数据保存完成后再手动调用app.quit()退出应用。

will-quit 事件

will-quit事件在应用程序所有窗口都已关闭并且应用程序将退出时发出。此时,主进程仍在运行,我们可以执行一些资源清理工作。

示例代码

const { app } = require('electron');

app.on('will-quit', (event) => {
console.log('应用程序窗口已关闭,即将退出');

// 执行资源清理等操作
cleanupResources();
});

will-quit事件的监听器中,我们可以执行关闭数据库连接、删除临时文件等清理工作。

quit 事件

当应用程序退出时将发出quit事件。我们可以监听此事件,在应用退出后再做一些最终的清理操作。

示例代码

app.on('quit', (event, exitCode) => {
console.log('应用程序已退出,退出码为:', exitCode);

// 执行最终清理工作
doFinalCleanup();
});

需要注意的是,此时应用已经退出,只能执行同步的清理操作,不要再做异步操作了。

gpu-process-crashed 事件

当 GPU 进程崩溃或被杀死时,会触发gpu-process-crashed事件。我们需要监听此事件并采取相应的异常处理和恢复策略。

示例代码

app.on('gpu-process-crashed', (event, killed) => {
console.log('GPU进程崩溃,是否被杀死?', killed);

// 执行异常处理
handleGPUCrash();

// 尝试恢复
tryToRecover();
});

当 GPU 进程崩溃时,可能会导致应用界面卡死或黑屏。我们要设法恢复应用状态,例如重新创建渲染进程等。