5
votes

Quelle est la bonne façon de redémarrer une application Electron?

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à:

  1. Une raison de préférer app.quit ou app.exit ?
  2. Une raison pour laquelle il faut exécuter 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:

 entrez la description de l'image ici p>

Un clic sur l'un des éléments du menu produira le même résultat: l'application se ferme puis redémarre.


0 commentaires

3 Réponses :


-1
votes

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 ..

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.


1 commentaires

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?



3
votes
  1. 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é.

  2. 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.


1 commentaires

À 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?



8
votes

La bonne façon de redémarrer une application d'électrons est:

app.relaunch()
app.exit()

Voir documentation officielle .


0 commentaires