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 进程崩溃时,可能会导致应用界面卡死或黑屏。我们要设法恢复应用状态,例如重新创建渲染进程等。