Как правильно перезапустить приложение Electron? - PullRequest
0 голосов
/ 04 мая 2019

В этой документации Electron page они рекомендуют, чтобы перезапустить приложение, необходимо выполнить app.quit или app.exit после вызова app.relaunch:

Обратите внимание, что этот метод не завершает работу приложения, когда выполняется, необходимо вызвать app.quit или app.exit после вызова app.relaunch, чтобы перезапустить приложение.

Однако после экспериментов я обнаружил, что порядок на самом деле не имеет значения. (см. Мой пример ниже.)

Я знаю, что app.quit и app.exit не совсем одно и то же. Первый может быть прерван и вызовет некоторые события, в то время как последний вынудит приложение выйти без каких-либо событий или не позволит приложению отменить действие.

Вопрос : если предположить, что принудительно завершать работу приложения всегда нормально и что у нас нет задач для выполнения до выхода из приложения, есть:

  1. Причина предпочитать app.quit или app.exit?
  2. Причина, по которой нужно запускать app.quit или app.exit после app.relaunch?

Вот очень простое приложение Electron:

package.json

{
  "name": "burrito",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "devDependencies": {
    "electron": "^4"
  }
}

main.js

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');
});

Создание следующего меню приложения:

enter image description here

Щелчок по любому из пунктов меню даст тот же результат: приложение закроется, а затем перезапустится.

Ответы [ 2 ]

1 голос
/ 04 мая 2019
  1. quit изящно закрывает все окна, после чего выходит, по сравнению с exit, который просто завершает приложение, не обращая внимания ни на что, например process.exit в Node.В большинстве случаев вы захотите использовать quit для обеспечения безопасности.

  2. Желательно сначала позвонить relaunch, чтобы предотвратить состояние гонки.Это почти никогда не случится в производстве из-за того, как работает цикл обработки событий, но это просто хорошая практика.

0 голосов
/ 04 мая 2019

в электроне много ошибок ...

вы видите, что это одна из них ... (app.relaunch работает после app.exit)

-----------------------------------------------------------------------

/* app.quit() */

app.quit корректно завершит работу вашего приложения.

прослушиватели событий, такие как will-quit, quit будут запущены, если вы выйдете с помощью app.quit ..так что вы можете предотвратить завершение приложения с помощью event.preventDefault() ..

/* app.exit() */

, в то время как с app.exit() эти слушатели не будут вызываться, так что если вы не можете завершить приложение, даже есливедущие настроены ..

-----------------------------------------------------------------------

Я думаю, теперь вы можете решить, что вы должны использовать между выходом и выходом в зависимости от вашего варианта использования.

и для вашегоВторой вопрос, на который у меня нет твердого ответа, так как мне кажется, что app.relaunch работает после app.exit. Я проверил его в v4 и v5 .. Одинаковые результаты в обоих ..

это такобычная практика вызывать перезапуск перед выходом или выходом ..

, и его следует придерживаться, так как это может быть решено в будущих выпусках ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...