Dans cette page de documentation Electron, ils recommandent que pour redémarrer une application, il faut exécuter app.quit
ou app.exit
après l'appel à app.relaunch
:
Notez que cette méthode ne quitte pas l'application lorsqu'elle est exécutée, vous devez appeler app.quit ou app.exit après avoir appelé app.relaunch pour que l'application redémarre.
Cependant, après avoir expérimenté, j'ai trouvé que l'ordre ne semble pas vraiment avoir d'importance. (Voir mon exemple ci-dessous.)
Je sais que app.quit
et app.exit
ne sont pas tout à fait les mêmes . Le premier peut être interrompu et déclenchera certains événements tandis que le second forcera l'application à se fermer sans déclencher d'événement ni autoriser l'application à annuler l'action.
Question : en supposant que il est toujours correct de forcer l'application à se fermer et que nous n'avons aucune tâche à effectuer avant la fermeture de l'application, est-ce là:
app.quit
ou app.exit
? app.quit
ou app.exit
après app.relaunch
? Voici une application Electron très simple:
package.json
const {app, BrowserWindow, Menu} = require('electron'); let mainWindow; app.on('ready', () => { Menu.setApplicationMenu( Menu.buildFromTemplate([ {role: 'appMenu', submenu: [ {label: 'relaunch(); exit()', click() { app.relaunch(); app.exit(); }}, {label: 'relaunch(); quit()', click() { app.relaunch(); app.quit(); }}, {type: 'separator'}, {label: 'exit(); relaunch()', click() { app.exit(); app.relaunch(); }}, {label: 'quit(); relaunch()', click() { app.quit(); app.relaunch(); }} ]} ]) ); mainWindow = new BrowserWindow({width: 640, height: 480}); mainWindow.loadFile('index.html'); });
main.js
{ "name": "burrito", "version": "1.0.0", "main": "main.js", "scripts": { "start": "electron ." }, "devDependencies": { "electron": "^4" } }
Production du menu d'application suivant:
Un clic sur l'un des éléments du menu produira le même résultat: l'application se ferme puis redémarre.
3 Réponses :
il y a beaucoup de bugs dans l'électron ...
vous voyez que c'est l'un d'entre eux ... (app.relaunch fonctionne après app.exit)
-------------------------------------------- ---------------------------
/ * app.quit () * /
app.quit
quittera votre application en douceur.
Les écouteurs d'événements tels que quittera
, quitter
est déclenché si vous quittez avec app.quit
..
vous pouvez donc empêcher la fermeture de l'application avec event.preventDefault ()
..
/ * app.exit () * /
avec app.exit ()
, ces auditeurs ne seront pas appelés ainsi si vous ne pouvez pas mettre fin à l'application même si les présentateurs sont définis.
-------------------------------------------- ---------------------------
Je suppose que maintenant vous pouvez décider de ce que vous devez utiliser entre quitter et quitter en fonction de votre cas d'utilisation.
et pour votre deuxième question, je n'ai pas de réponse solide car il me semble bug que app.relaunch fonctionne après app.exit .. je l'ai testé en v4 et v5 .. mêmes résultats dans les deux .. p>
il est courant d'appeler le redémarrage avant de quitter ou de quitter.
et devrait être suivi car il pourrait être résolu dans les versions futures.
Avez-vous des preuves que app.relaunch
fonctionnant après app.quit
est en fait un bogue? Y a-t-il un bogue dans GitHub que je peux suivre?
quit
ferme gracieusement toutes les fenêtres puis quitte, par rapport à exit
qui met simplement fin à l'application sans égard à autre chose, comme le processus . quitter
dans Node. Vous voudrez utiliser quit
dans la plupart des situations pour des raisons de sécurité.
Il est préférable d'appeler d'abord relance
pour éviter les conditions de course. Cela n'arrivera presque jamais en production à cause du fonctionnement de la boucle d'événements, mais c'est juste une bonne pratique.
À quel genre de condition de race pensez-vous? Avez-vous un exemple de quelque chose qui peut se produire pendant le développement que app.relaunch (); app.quit ()
(dans cet ordre) atténuerait et n'arriverait pas en production?
La bonne façon de redémarrer une application d'électrons est:
app.relaunch() app.exit()
Voir documentation officielle .