跳到主要内容

应用生命周期

app 模块描述整个应用的启动和退出,不是某一个窗口。窗口必须在 ready 之后创建。官方快速开始里的骨架是:

app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});

常用事件​

事件含义
readyElectron 初始化完成,可以创建窗口、注册协议处理器
window-all-closed所有窗口都已关闭
activatemacOS 上点击 Dock 图标且应用已在运行
before-quit退出流程开始,可以阻止退出
will-quit窗口已经关闭,适合注销全局快捷键
quit应用正在退出
second-instance第二个实例启动,且当前进程持有单实例锁
open-urlmacOS 上用已注册协议唤起应用
login网页或 utility 进程遇到 HTTP 基本认证或代理认证

macOS 在最后一个窗口关闭后通常保持进程,所以 window-all-closed 里会放过 darwin。用户再点 Dock 时由 activate 重新建窗。Windows 和 Linux 上,最后一个窗口关闭后调用 app.quit()。

必须放在 ready 之前的事​

  • app.requestSingleInstanceLock()
  • protocol.registerSchemesAsPrivileged()
  • app.setPath('userData', ...),用来把测试数据和正式数据分开

ready 之前创建 BrowserWindow 会失败。

相关文档​