LoginSignup
4

More than 5 years have passed since last update.

electronでTray Iconを使った時、メニューバーからアイコンが消える

Last updated at Posted at 2017-03-31

解決策

new Tray() を代入する変数を app.on('ready')のコールバック関数のブロック外で宣言する。

原因

Trayのインスタンスが入る変数をapp.on('ready')のコールバック内に宣言するとGCされる事がある。

GC(ガベージコレクション)とは

ガベージコレクション(英語: garbage collection; GC)とは、プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である。「 ガベージコレクション」を直訳すれば「ゴミ集め」「ごみ拾い」となる。

プログラムがもうアクセスしないと判断した変数を自動的に破棄する機能。

コード例

良い例

let tray = null;

app.on('ready', () => {
  tray = new Tray('path/to/icon');
});

悪い例

app.on('ready', () => {
  const appIcon = new Tray(icon);  //一定時間アクセスがない場合はGCされる
});

背景

appの起動が完了するより前にTrayのインスタンスは作れない(electronがエラーを返す)。

そのためnew Tray()をapp.on('ready') 等のコールバック内に書くのが一般的。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4