在electron中,app.quit()和app.exit()都是用來退出程序的,但是它們之間有什么區別呢?我們一探究竟。
默認退出
如果你沒有監聽window-all-closed
事件並且所有窗口都關閉了,默認的行為是退出程序
監聽window-all-closed
假設你的electron應用開了3個窗口,然后都被關閉了,然后你監聽了window-all-closed
事件,electron會window-all-closed
觸發事件,你可以在回調函數中控制是否退出程序:
const { app } = require('electron')
app.on('window-all-closed', (evt) => {
app.quit() // 顯示調用quit才會退出
// 回調函數什么也不做也不會退出
});
app.quit()
當開發者調用了 app.quit(),如果此時所有窗口已經關閉,直接觸發quit事件;否則Electron 會首先觸發before-quit,然后開始關閉所有的窗口,然后觸發 will-quit 事件,注意在這種情況下 window-all-closed 事件不會被觸發,所以你可以放心在window-all-closed里使用app.quit(),而不用擔心會出現無限遞歸。
那么調用app.quit()是不是一定可以quit呢,答案是否定的,在before-quit,will-quit中調用event.preventDefault();在window的close事件回調函數中阻止窗口關閉,都可以使程序退出失敗。所以app.quit()就像一個溫和的人,有點婆婆媽媽的,發出事件,大家商量着來。結果也就有失敗的可能。那么有更粗暴的嗎?就是app.exit了
app.exit()
app.exit()可是個狠人,調用之后,什么回調函數都沒有,跟別的代碼也沒的商量,直接退出。與之類似的是window.destroy(),不會像window.close那樣通知一堆事件,直接強制關閉
.